LuCI的uci使用(lua)
add123local uci = require("luci.model.uci").cursor()uci:add("wireless", "wifi-iface")uci:commit("wireless")
actual result:
config wifi-iface 一句会添加至 /etc/config/wireless 的末尾。
deletesample cat /etc/config/network:
12config interface option ipaddr '192.168.1.1'
codes:
123local uci = require("luci.model.uci").cursor()uci:delete("network", "lan", "ipaddr") -- 如果不加第三个参数(ipaddr),则会delete掉lan的所有options,包括config interface 'la ...
Rstudio编译Rmd报错:the fontspec package requires either XeTeX or LuaTeX.
对于一些常规的报告,我一般是会写一个脚本来自动运行、生成格式化的模板。然后通过 R 的软件包 knitr 来实现自动化报告效果。这样可以十分方便的把数据分析与数据报告结合在一起,如果在分析端的脚本有变化,我们只需要把主要精力放在修改 R 脚本就可以了,而在报告端,在每次生成报告时会自动根据分析脚本生成的数据进行更新,从而完成「时时更新与可重复研究」的伟大目标。
比如,我们公司目前要求每周五收盘会,出具一份所有基金的净值报告文档。这个一方面要求数据保持与数据库的同步更新,二来还要求文档有一定的「逼格」。针对第一条,我本身在日常工作中就是使用 R 来处理各项数据分析,而对于第二条,以前我也系统性的学习过 LaTeX 这个排版届的「一股清流」。因此,自然而然的,我就使用 Rstudio 来完成这个常规化的工作了。
问题描述
可是,最近在新安装的 Rstudio 中运行原来的脚本,却出现一个奇怪的报错。我怀疑是 Rstudio 因为版本更新的问题,不再使用原来的部分 yaml 参数。下面我们来看看具体的报错:
/usr/bin/pandoc +RTS -K512m -RTS Report ...
Lua数据结构 — lua_State(六)
前面各种Lua的数据类型基本都说得差不多了,剩下最后一个数据类型:lua_State,我们可以认为是”脚本上下文”,主要是包括当前脚本环境的运行状态信息,还会有gc相关的信息。
Lua这门语言考虑了多线程的情况,在脚本空间中能够开多个线程相关脚本上下文,而大家会共用一个全局脚本状态数据,如下:
全局数据global_state的数据结构如下:
global_state主要是用于GC的数据链表,下面简要说明几个:
stringtable strt:这个是在TString那章说到的全局字符串哈希表
TValue lregistry:对应LUAREGISTRYINDEX的全局table.
TString *tmname[TM_N]:元方法的名称字符串。
Table *mt[NUM_TAGS]:基本类型的元表,这是Lua5.0的特性。
mt成员在作者介绍文章中说到:
在上面代码中,我们看到a支持一个tostring的方法,a是数值类型,我们可以为数值类型添加任意的方法。Lua文章中说到一个用途,就是对于unicode和gbk的字符串的len方法能自己实现。
其它成员就不一一介绍了,下 ...
lua
Lua 入门最近想系统花几天时间学习 Lua 是因为在看 《redis 实战》的过程中发现 Lua 可与 redis 匹配产生叠加性能。nginx+Lua+redis 的联姻又可以再次增强 redis 的功力。
教程 Lua 是用标准 C 语言编写的强大的、开源、轻量级、嵌入式的脚本语言。提供面向过程, 面向对象, 面向函数式, 数据驱动的编程方式。
设计目的 嵌入到应用程序中, 为应用程序提供灵活的扩展和定制功能。
特性
轻量级: 使用标准 C 语言编写并以源码形式开放, 编译后只有 100 多k, 非常便于嵌入到别的程序中。
可扩展: Lua 提供了非常易于使用的扩展接口和机制: 由宿主(通常是 C 或 C++)提供这些功能, 使用起来就像内置的功能一般。
其他特性: 自动内存管理; 提供了一种通用的类型的表(table), 用来实现数组, 哈希表, 集合, 对象; 语言内置模式匹配; 闭包(closure); 函数也可以看作一个值; 提供多线程等。
应用场景
游戏开发
独立应用脚本
Web 应用脚本
扩展和数据库插件: MySQL Proxy 和 MySQL WorkBen ...
python和lua数据类型的比较
<a href="/2015/07/11/redis_hiredis_install_tutorial/" rel="next" title="redis和hiredis安装教程">
<i class="fa fa-chevron-left"></i>
<p class="post-nav-pre-next-title">
redis和hiredis安装教程
</p>
</a>
</div>
<span class="post-nav-divider"></span>
<div class="post-nav-prev po ...
Lua学习笔记
Lua在设计上,从一开始就把简洁、高效、可移植性、可嵌入型、可扩展性等作为自己的目标。
数据类型
表、函数、线程、以及完全用户数据在 Lua 中被称为对象:变量并不真的持有它们的值,而仅保存了对这些对象的引用。 赋值、参数传递、函数返回,都是针对引用而不是针对值的操作, 这些操作均不会做任何形式的隐式拷贝。
基本类型
描述
数值(number)
内部以double表示
字符串(string)
总是以零结尾,但可以包含任意字符(包括零),因此并不等价于C字符串, 而是其超集
布尔(boolean)
只有“true”或者“false”两个值。nil → false,others → true
函数(function)
Lua的关键概念之一。不简单等同于C的函数或函数指针。
表(table)
异构的Hash表。Lua的关键概念之一。
userdata
用户(非脚本用户)定义的C数据结构。脚本用户只能使用它,不能定义。
线程(thread)
Lua协作线程(coroutine),与一般操作系统的抢占式线程不一样。
nil
为初始化的值,逻辑值为 ...
Luajit反编译之探索记
由于工作需求,要反编译一个luajit编译过的文件。百度反编译luajit,得到的信息是目前没有此类成熟的反编译器。所以,如果你用luajit编译了代码,基本上不用担心被别人破解(2015.12)。
虽然没有luaj反编译器,但是不代表反编译不可能。至少,人肉反编译是可以的,哈。因为我只需要反编译一个文件,所以采取人肉的方式,也许是可行的。
首先,在github上面找到了唯一的一个项目是关于反编译luaj的项目,这个作者写了个工具,可以把手头上的代码翻译成可以可以阅读的模式。(在win/linux下可以直接执行他的工具,他的工具用的是AutoIt脚本写的)
通过阅读他的源码,才知道这个工具首先是用luajit的命令行工具,把字节码转换成可读的模式:
luajit -bl test.lua test.txt
翻译的思路,就是根据luajit提供的指令表,把指令翻译成对应的lua源码,例如, 对这句指令 MOV dst var,翻译成 local dst = var
在对luajit指令的翻译过程,最麻烦的是,lua里的function被重新整理,原来是树状结构的(毕竟大家总是会在f ...
cocos2dx lua 绑定详解与实战
我们平时在开发cocos2dx lua游戏的时候的,会遇到这样的情况:
在c++层定义了一些类,我们需要将这些类导出给Lua来使用,从而完成在c++层实现起来容易的需求,这个时候就需要将整个类作为模块导出。
而Cocos2d-x正是采用的这种思想,将Cocos中的类导出供用户使用,而不是再写一套Lua代码,用户使用Cocos导出的这套接口,在Lua脚本层写游戏代码。
为了更好的理解这部分的内容,可以先了解c++中调用Lua的机制。
推荐
手动绑定自定义类中的函数
自动绑定自定义类中的函数
前面文章中,我们说到了,Lua的本质是C,不是C++,Lua提供给C用的API也都是基于面向过程的C函数来用的,要把C++类注册进Lua形成一个一个的table环境是不太容易一下子办到的事。
为了实现我们的需求,同样也是官方的需求,在Cocos 2.x版本的时候,使用的是tolua++这个工具,但是这个工具用起来相当的麻烦,耗费体力,所以现在使用的是bindings-generator工具(官方用Python写的一个工具),这个东西底层使用的也应该是tolua++。
这里只针对iOS平台, ...
Lua模块与包 · 花生肉泥
lua的模块是由变量,函数等已知元素组成的table,因此创建一个模块很简单,就是创建一个table,然后把需要导出的常量,函数放入其中,最后返回这个table就行。
例:123456789101112131415161718192021-- 定义一个名为module的模块module = {}-- 定义一个常量module.constant = "这是一个常量"-- 定义一个函数function () io.write("这是一个公有函数!")endlocal function func2() print("这是一个私有函数!")endfunction module.func3() func2()endreturn module
由上可知,模块的结构就是一个table结构,因此可以像操作调用table里的元素那样来操作调用模块里的常量或变量
require函数
lua提供了一个名为require的函数来加载模块,要加载一个模块,只要简单的调用就就可以了例;1require("<模块名>" ...
Lua学习笔记(4)面向对象实现
百度搜索一下,给出出的解决方案和学习帖子很多,可是我还是有很多的问题!
什么是面向对象?
lua中怎么实现面向对象?
什么样的实现既简单又能完成我的功能?
一定要按照c++的方式实现类的继承吗?
在学习lua面向对象的过程中我比较喜欢下面两种实现方式:
简单粗暴的实现
参考[1]:参考同事的方法,如果借鉴、转载请注明
在lua中,我们知道table是万能的一个类型,当我们用table实现一个基类和子类的时候,他们都是确确实实存在的一个个table,都是有地址的。不会说像c++一样,类定义是类定义,只有new出来才是真正可以使用的,而lua却不是这样。所以,最简单的一种方法就是,每次继承基类的时候,直接copy基类的所有内容,函数除外,其他的成员都重新复制一遍,如果是table的话重新构建一个,并且把内容拷贝过来。代码如下:
参考代码:
--lua面向对象:简单粗暴的实现function copytable(tbArg)
local tbCollsion = {}
-- ...