2017-06-19 18 views
2

我用一些協同程序,並嘗試使用不恢復一個:Lua中沒有不一樣,不是不

if not co == nil then `resume end 

和協程不會恢復。雖然co是零。真是莫名其妙。

所以我最終設法

if co then `resume end 

和它的工作!

爲什麼不不(無==無),這在邏輯上是錯誤的,當合作是零,真當它是不是這是不一樣的零這是當協是零,否則返回true邏輯假?

我不是全部使用否定邏輯表達式,但現在我擔心也許我的一些代碼是越野車。也許這只是一個協程問題? (並且我100%確定該值爲零,因爲這是打印出的內容,除非零不再等於零)

+0

如果你暗示co是一個線程或零,否則你可以簡單地寫'如果co然後恢復結束'。沒有必要檢查co是否等於零。如果你想100%確定類型(co)是否等於「線程」。 – Piglet

回答

6

not co == nil相當於(not co) == nil,因爲operator precedence

如果co爲零,則not co爲真,與nil不同。

事實上,not的結果永遠是真或假,所以永遠不會等於零。

not (co == nil)co ~= nil

+0

哇,好吧,這很奇怪; /不是隻是一個逆變器,它不應該是這樣,但哦... – AbstractDissonance

+5

@AbstractDissonance爲什麼不應該這樣呢?這就像是說意大利人說的東西很奇怪,而且它不應該是這樣,因爲你不知道意大利語語法...... – Piglet

+1

@AbstractDissonance,它在其他語言中是一樣的。例如,在C中,'! x == 2'不等於'!(x == 2)'。 – lhf

相關問題