使用函数加载块
func
以获取其片段。每次调用都func
必须返回一个与先前结果连接的字符串。返回空字符串、nil或无值表示块的结束。
根据我的测试,这实际上不是真的。或者,更确切地说,文档至少具有误导性。
考虑这个示例脚本:
function make_loader(return_at)
local x = 0
return function()
x = x + 1
if x == return_at then return 'return true' end
return nil
end
end
x = 0
repeat
x = x + 1
until not load(make_loader(x))()
print(x)
输出是对在放弃之前返回的函数make_loader()
返回的函数的连续调用次数,并返回一个不返回任何内容的函数。nil
load()
如果要按面值获取文档,人们会期望此处的输出为“1”。但是,输出为“3”。这意味着调用 to 的参数load()
直到它返回nil
3 次才load()
放弃。
另一方面,如果块函数立即返回一个字符串,然后nil
在随后的调用中,它只需要一个nil
停止加载:
function make_loader()
local x = 0
return {
fn=function()
x = x + 1
if x == 1 then return 'return true' end
return nil
end,
get_x=function() return x end
}
end
loader = make_loader()
load(loader.fn)
print(loader.get_x())
正如我所料,这会打印“2”。
所以我的问题是:文档有错吗?出于某种原因,这种行为是否可取?这只是一个错误load()
吗?(这似乎是故意的,但我找不到任何解释原因的文档。)