Lua 函数如何访问在更高级别上定义的局部变量?

Lua 函数如何访问在更高级别上定义的局部变量?,lua,Lua,我只是从Lua开始,我对函数访问局部变量有一个问题。天真的方法,只是尝试访问一个变量,似乎不起作用 function fn1() print(foo) end local foo = "Hello, world" fn1() -- Prints nil 在本例中,我可以将foo传递给函数(如fn(foo)),但对于更复杂的情况,这会变得很棘手 function fn1() fn2() end function fn2() print(foo) end loca

我只是从Lua开始,我对函数访问局部变量有一个问题。天真的方法,只是尝试访问一个变量,似乎不起作用

function fn1()
  print(foo)
end

local foo = "Hello, world"
fn1()         -- Prints nil
在本例中,我可以将
foo
传递给函数(如
fn(foo)
),但对于更复杂的情况,这会变得很棘手

function fn1()
  fn2()
end

function fn2()
  print(foo)
end

local foo = "Hello, world"
fn1(foo)         -- Also prints nil
从内部函数访问
foo
的正确方法是什么?将
foo
传递到
fn1
然后传递到
fn2
会起作用,但当涉及多个变量和函数时,这会变得很困难。我不想让
foo
global。还有其他方法可以实现这一点吗?

您可以这样做,将本地功能置于这两个功能的范围内

local foo = "Hello, world"

function fn1()
  fn2()
end

function fn2()
  print(foo)
end

fn1()

@hjpotter92是真的,但我只是复制了操作码并移动了局部变量,没有做任何进一步的编辑。关键是局部变量的作用域开始于声明它的语句之后和下面。除非需要,否则您可能也不希望将
fn1
fn2
设为全局变量。