我似乎无法理解Lua评估布尔值的方式。
这是一个旨在证明问题的简单片段:
function foo()
return true
end
function gentest()
return 41
end
function print_hello()
print ('Hello')
end
idx = 0
while (idx < 10) do
if foo() then
if (not gentest() == 42) then
print_hello()
end
end
idx = idx +1
end
运行此脚本时,我希望在控制台上看到“Hello” - 但是,没有打印任何内容。有谁能解释一下?
答案 0 :(得分:10)
在while循环中,您应该使用括号外的not
:
while (idx < 10) do
if foo() then
if not (gentest() == 42) then
print_hello()
end
end
idx = idx +1
end
(gentest() == 42)
将返回false,然后not false
将返回true。
(not gentest() == 42)
与( (not gentest()) == 42)
相同。由于not gentest()
返回not 41
== false
,您将获得false == 42
,最后返回false
。
答案 1 :(得分:2)
试试not (gentest() == 42)
。
答案 2 :(得分:1)
我没有尝试过,但我认为not
的优先级高于==
,导致
if ((not 41) == 42) then
...显然not-operator的结果(true或false)不等于42。
答案 3 :(得分:0)
在您的示例的上下文中,'not'不会被视为布尔值,而是被视为反转运算符。没有算术运算符的布尔示例 - 'if a'表示当满足条件,状态,事件或开关'a'的测试时结果为真,'if not a'表示条件,状态,事件或结果为真时开关'a'不满意。当一个条件语句有一个算术运算符和第二个值时,那么'not'略有不同,并且测试是作为变量或文字的特定值,如'if a not = 42',因为它是条件运算符而不是布尔运算符和真值表可能有不同的条目。