Lua笔记10-非全局函数
来源:互联网 发布:js 设置session属性值 编辑:程序博客网 时间:2024/06/05 04:45
Lua中函数可以作为全局变量也可以作为局部变量,我们已经看到一些例子:函数作为table的域(大部分Lua标准库使用这种机制来实现的比如io.read、math.sin)。这种情况下,必须注意函数和表语法:
1. 表和函数放在一起
Lib = {}Lib.foo = function (x,y) return x + y endLib.goo = function (x,y) return x - y end
2. 使用表构造函数
Lib = { foo = function (x,y) return x + y end, goo = function (x,y) return x - y end}
3. Lua提供另一种语法方式
Lib = {}function Lib.foo (x,y) return x + yendfunction Lib.goo (x,y) return x - yend
当我们将函数保存在一个局部变量内时,我们得到一个局部函数,也就是说局部函数像局部变量一样在一定范围内有效。这种定义在包中是非常有用的:因为Lua把
chunk当作函数处理,在chunk内可以声明局部函数(仅仅在chunk内可见),词法定界保证了包内的其他函数可以调用此函数。下面是声明局部函数的两种方式:
1. 方式一
local f =function (...)
...
end
local g =function (...)
...
f() -- external local `f' is visible here
...
end
2.方式二
localfunction f (...)
...
end
有一点需要注意的是在声明递归局部函数的方式:
local fact = function (n) if n == 0 then return 1 else return n*fact(n-1) -- buggy endend
上面这种方式导致Lua编译时遇到fact(n-1)并不知道他是局部函数fact,Lua会去查找是否有这样的全局函数fact。为了解决这个问题我们必须在定义函数以前先声明:
local fact fact = function (n) if n == 0 then return 1 else return n*fact(n-1) endend
这样在fact内部fact(n-1)调用是一个局部函数调用,运行时fact就可以获取正确的值了。
在定义非直接递归局部函数时要先声明然后定义才可以:
local f, g -- `forward' declarations function g () ... f() ...end function f () ... g() ...end
0 0
- Lua笔记10-非全局函数
- lua非全局函数
- lua基础学习 - 非全局函数
- Lua初识之非全局函数-十二
- C/C++ 调用 Lua 函数(非全局函数)
- C/C++ 调用 Lua 函数(非全局函数)
- lua中的全局函数
- 非全局的函数
- LUA的内部全局函数
- 【笨木头Lua专栏】基础补充03:闭合函数、非全局函数与函数的尾调用
- boost bind 全局函数(非成员函数)
- ToLua学习笔记,获取全局lua表,局部lua表
- vs2010非unicode 全局拦截send函数
- Lua学习笔记函数
- C++中调用Lua的全局变量和全局函数
- Lua 中,将全局函数声明为local的优缺点
- C++中使用非静态成员函数代替全局函数
- lua笔记之函数(1)
- Eclipse快捷键 10个最有用的快捷键
- 关于函数参数入栈的思考(函数调用约定,入栈顺序)
- hadoop 遇到java.net.ConnectException: to 0.0.0.0:10020 failed on connection
- u3d网络链接状态
- 网页遮层
- Lua笔记10-非全局函数
- 【暑期基础3】A HDU 2053 Switch Game
- 深入浅出 MFC多视图
- SharedPreferences
- Apache Shiro 标签方式授权
- SQL性能调优
- Repeater添加一列序号列
- 线性表--链表
- C++_模板的实例化与具体化。