dofile和require不能像我预期的那样工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dofile和require不能像我预期的那样工作相关的知识,希望对你有一定的参考价值。

我想加载一些lua文件,然后将其粘贴到我的代码中间。

喜欢:

do
local abc = 123
dofile "somecode.lua"
end

而somecode.lua文件是:

if abc == 123
print("hello") end

我期望从这些代码和文件的进度和输出:

do
local abc = 123
if abc == 123
print("hello") end
end

output: hello

但实际输出没有显示任何内容,因为'local'声明不会影响dofile函数。

我想知道如何将代码插入到上面工作的代码中间(我所期望的)。有什么功能适合我想要的吗?

答案

首先,您的代码存在一些语法问题。

somecode.lua必须

if abc == 123 then
print("hello")
end

请注意==用于比较,并引入then

至于你的问题,hello没有被打印,原因是abc变量被声明为local;因此,abc声明中使用的if变量不是指本地abc,而是指默认的全球abc。为了解决这个问题,您必须在文件中初始化全局abc,以便somecode.lua也可以获取相同的变量。

像这样的东西:

$ cat file1.lua 
do
abc = 123
dofile "somecode.lua"
end
$ cat somecode.lua 
if abc == 123 then
print("hello")
end
$ lua file1.lua 
hello
另一答案

Lua文件本质上是一个函数。它可以有一个return语句,但它不能有参数。要将所有变量保持为局部,somecode.lua应返回一个函数。

somecode.lua

return function(abc)
  if abc == 123 then
    print("hello")
  end
end

其他档案:

dofile "somecode.lua"(123)

以上是关于dofile和require不能像我预期的那样工作的主要内容,如果未能解决你的问题,请参考以下文章

无法理解 size_hint。为啥这个 .kv 简单的代码不能像我预期的那样工作?

css flexbox / tailwind 'simple' 对齐没有像我预期的那样工作

Clickhouse:runningAccumulate() 不像我预期的那样工作

sleep() 不像我预期的那样工作

变形金刚 BartTokenizer::add_tokens() 不像我对后缀的预期那样工作

Html.Encode 至少不能像我认为的那样工作