Lua中闭包内如何访问整个文件中的局部变量?

2026-04-01 19:351阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计267个文字,预计阅读时间需要2分钟。

Lua中闭包内如何访问整个文件中的局部变量?

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

在 `a.lua`:lualocal x=5x=dofile('b.lua')()

在 `b.lua`:lualocal fun=function() print(x)endreturn fun

如果在shell中运行 `luajit a.lua`,将打印 `nil`,因为 `b.lua` 中定义的函数无法访问 `a.lua` 中定义的局部变量 `x`。

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

在a.lua:

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没有被它看到是有道理的.

本文共计267个文字,预计阅读时间需要2分钟。

Lua中闭包内如何访问整个文件中的局部变量?

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

在 `a.lua`:lualocal x=5x=dofile('b.lua')()

在 `b.lua`:lualocal fun=function() print(x)endreturn fun

如果在shell中运行 `luajit a.lua`,将打印 `nil`,因为 `b.lua` 中定义的函数无法访问 `a.lua` 中定义的局部变量 `x`。

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

在a.lua:

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没有被它看到是有道理的.