【发布时间】:2018-06-20 22:10:59
【问题描述】:
我对 lua 很陌生,我想了解以下行为。
当我尝试运行以下递归函数时:
local func = function ( n )
if n == 1 then return 1
else return n * func( n - 1 )
end
end
print( func( 5 ) )
程序将失败并出现错误:
lua: main.lua:16: attempt to call a nil value (global 'func')
stack traceback:
main.lua:16: in local 'func'
main.lua:38: in main chunk
[C]: in ?
没关系,因为根据explanation,func 变量的本地版本尚不清楚,因此它会尝试调用全局版本。但是当我删除 local 关键字时,下面的代码可以正常工作吗?
func = function ( n )
if n == 1 then return 1
else return n * func( n - 1 )
end
end
print( func( 5 ) )
程序打印 120 作为结果,但全局 func 之前从未初始化或使用过。这怎么可能,这也不会引发错误?第二个例子不是像第一个例子那样引用全局 func 吗?
【问题讨论】:
标签: variables recursion lua scripting-language