Lua中的not并不与非not相同

我正在使用一些协程,想要通过not来恢复其中一个:

if not co == nil then `resume end

但是协程不会恢复。尽管co是nil。这很令人疑惑。

所以我最终尝试了

if co then `resume end

它起作用了!

为什么not(nil==nil)不成立,当co是nil时为logically false,而当co不为nil时为true,而nil则logically false当co是nil时为true,否则为true?

我经常使用not来否定逻辑表达式,但现在我担心可能我的某些代码存在漏洞。也许这只是协程有问题? (我100%确定该值是nil,因为这就是所打印的,除非nil不再等于nil)

点赞
用户107090
用户107090

因为运算符优先级, not co == nil 等同于 (not co) == nil

如果 conil,那么 not co 为真,因此和 nil 不同。

事实上,not 的结果始终为 truefalse,因此永远不等于 nil

写成 not(co == nil)co ~= nil

2017-06-19 11:21:57