Lua脚本中的奇怪逻辑?

时间:2011-02-15 16:04:46

标签: lua

我似乎无法理解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” - 但是,没有打印任何内容。有谁能解释一下?

4 个答案:

答案 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',因为它是条件运算符而不是布尔运算符和真值表可能有不同的条目。