Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 这个本地功能可以在范围外访问,有什么解释吗? 对于i=1,20 do——创建一个循环 如果我对于i=1,20 do——创建一个循环 >>如果我>局部函数LessThan10() >>返回i >>结束 >>结束 >>结束 >打印(小于10() stdin:1:尝试调用全局'LessThan10'(一个nil值) 堆栈回溯: stdin:1:在主块中 [C] :?_Function_Lua_Scope - Fatal编程技术网

Function 这个本地功能可以在范围外访问,有什么解释吗? 对于i=1,20 do——创建一个循环 如果我对于i=1,20 do——创建一个循环 >>如果我>局部函数LessThan10() >>返回i >>结束 >>结束 >>结束 >打印(小于10() stdin:1:尝试调用全局'LessThan10'(一个nil值) 堆栈回溯: stdin:1:在主块中 [C] :?

Function 这个本地功能可以在范围外访问,有什么解释吗? 对于i=1,20 do——创建一个循环 如果我对于i=1,20 do——创建一个循环 >>如果我>局部函数LessThan10() >>返回i >>结束 >>结束 >>结束 >打印(小于10() stdin:1:尝试调用全局'LessThan10'(一个nil值) 堆栈回溯: stdin:1:在主块中 [C] :?,function,lua,scope,Function,Lua,Scope,令人惊讶的是,尽管LessThan10在一个条件语句中,并且它是一个local函数(实际上它不是函数,而是变量)。不知怎么的,我仍然可以打印出答案 这非常有趣(我在Zerobrane中查看,LessThan10是一个局部函数) 编辑:我想这是我的口译员的问题,我换了口译员,这东西出错了 我测试了这个,它只在Lua5.0和5.1上运行 我在lua5.3上再次测试了它,它不再工作了 我的zerobrane无缘无故地将我的lua版本重置为5.0,如果这个问题让您失望,那么很抱歉。在lua 5.0解释器

令人惊讶的是,尽管
LessThan10
在一个条件语句中,并且它是一个
local
函数(实际上它不是函数,而是变量)。不知怎么的,我仍然可以打印出答案

这非常有趣(我在Zerobrane中查看,
LessThan10
是一个局部函数)

编辑:我想这是我的口译员的问题,我换了口译员,这东西出错了

我测试了这个,它只在Lua5.0和5.1上运行

我在
lua5.3
上再次测试了它,它不再工作了


我的zerobrane无缘无故地将我的lua版本重置为5.0,如果这个问题让您失望,那么很抱歉。

在lua 5.0解释器中测试:

Lua 5.0.3版权所有(C)1994-2006年里约临时市政厅Tecgraf
>对于i=1,20 do——创建一个循环
>>如果我<10,那么
>>局部函数LessThan10()
>>返回i
>>结束
>>结束
>>结束
>打印(小于10()
stdin:1:尝试调用全局'LessThan10'(一个nil值)
堆栈回溯:
stdin:1:在主块中
[C] :?
我也不能相信这是/曾经是有效的代码,因为局部变量只在声明它们的块中可见


如果您使用的是自定义Lua解释器,您应该对其进行进一步研究,这似乎很有趣。

Nvm,我的Lua版本已经过时,抱歉,伙计们B(这从来没有起过作用。也许你以前定义过
LessThan10
为全局。如果它不起作用,我就不会发布这个问题。另外,这是基于Lua5.1书中的一个例子(我没有复制粘贴),这在5.0或5.1中不是合法代码。这在5.0中与在5.4中一样正确。还有其他一些事情正在发生。是吗上面链接的可见性部分的“基于示例”?这里显示了一个用函数闭包填充表的循环示例,但这不是发布的代码所做的。如果不是,这个示例代码是什么?
for i = 1, 20 do  --Create a loop
  if i < 10 then 
    local function LessThan10() 
      return i
    end 
  end
end 
print(LessThan10())