2 zhanghaodx082 zhanghaodx082 于 2016.04.11 21:04 提问

lua初学者 关于local函数的一个问题 5C

local f,g
local function f()
print("Hello f1!");
g()
end

local function g()
print("Hello g1!");
end
f()

如上,运行的时候为何会报错?实际上,我理解最开始已经声明了函数g,所以函数f中调用g的时候是应该可以找到的~
报错如下
Hello f1!
lua: localFunction.lua:4: attempt to call upvalue 'g' (a nil value)
stack traceback:
localFunction.lua:4: in function 'f'
localFunction.lua:10: in main chunk
[C]: ?

2个回答

wildwind79
wildwind79   2016.04.12 09:49

执行的时候g还未初始化。函数g的定义放前面。

zhanghaodx082
zhanghaodx082 但是在调用之前已经做了声明,难道lua语言没有声明这个概念?
2 年多之前 回复
CSDNXIAON
CSDNXIAON   2016.04.17 23:40

关于拷贝构造函数的一个问题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Lua变量生命周期
Lua变量的定义是很自由的,不需要像C语言那样必须指明类型,变量可以是任何“值”,比较特殊的一点是,可以把任何function赋值给变量,如: [plain] view plaincopy var = function()print("something") end     如果不再需要某个变量,可以直接把它置为nil,垃圾回收机
2017 原创整理 lua面试题
1、Lua中有8个基本类型分别为 nil、boolean、number、string、userdata、function、thread和table。   2、给出下面 表达式的输出是什么 print(type("Hello world"))        --> string print(type(10.4*3))             --> number print(type(p
Lua 中,将全局函数声明为local的优缺点
在openresty框架下面进行开发,lua语言的技巧 1.如果是一些经常用到的全局函数,可以申明为local局部变量,这样可以提升效率。 例如ipairs,pairs申明成local的,原因是local变量是存放在lua的堆栈里面的是array操作,而全局变量是存放在_G中的table中,效率不及堆栈 如果被多次执行调用的全局变量,就需要考虑用local来申明 2.loadfile()只会
lua中尽量使用local
结论: lua 5.1.5 windows环境下 使用local变量能够稍微提高效率 但是如果有了间接引用,比如 上面代码里面 local g = {} 定义成 local a = {}, a.g = {} 增加了简介引用之后,效率就会发生变化了 实际使用中不是很好控制 比如通常一个lua文件通常写成  local a = {} --或者 local a = class(
Lua local function与function区别
1 使用function声明的函数为全局函数,在被引用时可以不会因为声明的顺序而找不到 2 使用local function声明的函数为局部函数,在引用的时候必须要在声明的函数后面例子: 下面这段代码会报函数找不到的错误:lua: test.lua:3: attempt to call global ‘test1’ (a nil value)function test() test2(
lua local 变量和表
local是我们在lua编程里面经常写的,经常写的方式为local foo = foo。lua对local的处理有加速访问的效果,并且将变量定义为局部变量也是一种好的编程习惯。 lua对变量和表的local化处理的方式是不同的 ======example====== foo = {} foo.a =1 do local foo = foo
Lua的局部变量
Lua可以用local定义局部变量, 当
lua学习笔记---作用域
块,作用域全局和局部,默认情况下,为全局变量,除非特殊说明是局部代码中 do……end块内定义的变量无法被外部访问,同时任何在外围定义的局部变量也无法被内部访问。 强制转换 根据特定的转换规则(如果可能的话),将字符串转换成数字,从而在字符串和数字之间实现算术运算的过程这里先将b转换成数字,然后再与a的值相加从而得到结果但是,如果希望两个字符串相加可以得到字符串连接的话,那么需要用到所谓的lua中
lua之loadstring函数
该函数的返回值是返回一个function,如果load失败,则返回nil 例子代码: i = 32 local i = 0 f = loadstring("i = 1 + i; print(i)"); g = function () i = 1 + i; print(i) end f() g() f操作的全局i,g操作的是局部i,因为,loadstring总是在全局环境中去编译它
[lua] lua 函数 upvalue 数量限制
今天遇到一个报错: function at line xxx has more than 60 upvalues。查了一下,lua的upvalue是有上限的,这个上限定义在luaconf.h中: /* @@ LUAI_MAXUPVALUES is the maximum number of upvalues per function @* (must be smaller th