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

pen*_*sun 5 lua

假设我有以下两个Lua文件:

a.lua

local x = 5
f = dofile'b.lua'
f()
Run Code Online (Sandbox Code Playgroud)

b.lua

local fun = function()
  print(x)
end
return fun
Run Code Online (Sandbox Code Playgroud)

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

aa.lua

local x = 5
local f = function()
  print(x)
end
f()
Run Code Online (Sandbox Code Playgroud)

运行luajit aa.lua它打印5

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

Yu *_*Hao 5

顾名思义,局部变量对于块而言是局部的。

dofile()从另一个文件加载块。由于它是另一个块,因此第一个块中的局部变量x看不到它是有道理的。