gpt4 book ai didi

debugging - Lua-执行return和or时出错

转载 作者:行者123 更新时间:2023-12-03 07:49:04 25 4
gpt4 key购买 nike

我基本上是在做一些测试,以更好地了解Lua语言。我发现了一个对我没有意义的错误。

功能:

local function d(c)
return (!c and print("c", false) or print("c", true))
end

local function a(b, c)
return (!b and d(c) or print("b", true))
end

当我运行 a(1, nil)a(1, 1)时,它输出 b true,但是如果我运行 a(nil, 1),则它输出 c trueb true
如果有人能启发我,为什么从技术上讲不可能返回两个值?

最佳答案

也许您已经了解发生了什么,但是我已经写了这篇文章。 Lua没有!运算符;我猜你的意思是not。 (如果有人用!代替not制作了Lua的补丁版本,我不会感到惊讶。)
a(nil, 1)返回not nil and d(1) or print("b", true)。现在,not nil评估为trued(1)评估为nil,因此我们有了true and nil or print("b", true),后者又评估为nil or print("b", true),因此评估了print("b", true)

关于d(1)为何评估为nil的原因:它返回not 1 and print("c", false) or print("c", true)。这等效于not 1 and nil or nil,因为print在被调用时始终不返回任何内容,并且运算符niland都不会将任何内容视为or。无论not x and nil or nil是真实的还是虚假的,nil始终求值为x,因此d始终返回nil。 (唯一的区别是,如果d接收到伪造的值,则将评估两个print调用。)

您可以通过调用print来验证type(print('a'))不返回任何内容:它引发错误“错误的参数#1到'type'(期望值)”,而type(nil)返回"nil"

关于debugging - Lua-执行return和or时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53233510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com