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() 不像我预期的那样工作