lua – 在整个文件的闭包中看不到局部变量?

假设我有以下两个Lua文件

在a.lua:

local x = 5
f = dofile'b.lua'
f()

在b.lua:

local fun = function()
  print(x)
end
return fun

然后,如果我在shell中运行luajit a.lua,则打印nil,因为在b.lua中定义的函数中无法看到x.预期的打印应为5.但是,如果我将所有内容放在一个文件中,那么它正是我想要的:

在aa.lua:

local x = 5
local f = function()
  print(x)
end
f()

运行luajit aa.lua它打印5.

那么为什么x在第一种情况下无法看到呢?

解决方法

顾名思义,局部变量是块的本地变量.

dofile()从另一个文件加载块.因为它是另一个块,所以第一个块中的局部变量x没有被它看到是有道理的.

相关文章

1.github代码实践源代码是lua脚本语言,下载th之后运行thmai...
此文为搬运帖,原帖地址https://www.cnblogs.com/zwywilliam/...
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能...
localfunctiongenerate_action(params)localscale_action=cc...
2022年1月11日13:57:45 官方:https://opm.openresty.org/官...
在Lua中的table(表),就像c#中的HashMap(哈希表),key和...