在不是"a" == "b"的情况下的优先级

function test()
  if not "a" == "b" then
    print("the strings are different")
  end
end

看起来我的代码中到处都是这个错误。Lua将not==的优先级调高,解释为我正在询问"a"是否为nil值。我理解not的优先级高于==,但是Lua如何忽略行的其余部分?难道它不应该意识到后面还有内容,然后抛出一个错误,指出== "b"不能适应该语法吗?

原文链接 https://stackoverflow.com/questions/71190945

点赞
stackoverflow用户2858170
stackoverflow用户2858170

您可以使用逻辑运算符组合任意数量的值。除非您使用括号,否则Lua将使用运算符优先级来确定要首先评估的内容。

Lua没有强于==的not,并将其解释为我正在询问"a"是否为nil值。我知道not的优先级高于==

正确。这就是为什么Lua评估not "a" == "b"(not "a") == "b",这将解决为false == "b",最终为false

如果您想检查两个值是否不相等,请使用不等运算符~=

它不应该注意到还有更多内容并抛出一个错误,即" == "b"不符合语法?

不因为这是正确的语法。您只是使用了一个无法获得您想要的结果的表达式。

而not ("a" == "b" or "c" == "d")呢?这些需要嵌套的括号,即适用于上述方法中的not吗?

not ("a" == "b" or "c" == "d")解析为true

or的优先级最低。因此,您不需要进一步的括号。您应该使用更现实的示例,因为这些字符串永远不会相等。

(我不想做x ~= y,因为我比较的是我不完全确定是否有负面比较的对象。)

我无法理解这句话的意思。

2022-02-20 12:10:59