2017-05-30 66 views
-6

在Lua解釋,當我們鍵入:爲什麼在Lua中==會表現得像這樣?

>print(1=="1") 
false 

那麼好吧!

>print(false==true) 
false 

好吧!

>print(string==math) 
false 

好,但爲什麼呢?

>print(function==nil) 
stdin:1: '(' expected near '==' 

我不明白==和〜=的工作。請解釋

+1

爲什麼'string'應該等於'math'? 'function'是關鍵字,但不是可變的,所以'function == nil'根本就沒有出現。 – moteus

+0

'=='檢查參數是否相等。不知道你的想法會發生什麼,很難解釋你的理解錯誤。是什麼讓你認爲'string == math'會給出除false之外的結果?你期望什麼是'print(function == nil)'的結果? –

+0

@ChrisH就是這樣!字符串和數學是標準庫的一部分。所以如果字符串和數學是錯誤的,因爲它們沒有任何意義是相等的。然後函數和零也應該是假的,但事實並非如此。它拋出一個錯誤,而不是! –

回答

6
print(function==nil) 

給你的錯誤信息:

標準輸入:1: '(' 預計近期 '=='

因爲function是用來定義關鍵字一個函數變量,該關鍵字有望在某種語法中使用,function本身不是一個有效的Lua表達式,因此不能用作一個.Lua告訴你,你寫了一些東西 它不能解釋和它通常會預期function後跟(

請仔細閱讀https://www.lua.org/manual/5.3/manual.html#3.4.11https://www.lua.org/manual/5.3/manual.html#3.4https://www.lua.org/manual/5.3/manual.html#3.4.5

和別的:)

字符串和數學都是Lua的標準庫。字符串和數學是兩個不同的Lua表。因此它們不能相同,因此表達式字符串==數學是錯誤的。

https://www.lua.org/manual/5.3/manual.html#3.4

Lua中基本表達式如下:

EXP :: = prefixexp

EXP :: =零| false |真正

EXP :: =數字

EXP :: = LiteralString

EXP :: = functiondef

EXP :: = tableconstructor

EXP :: = '...'

exp :: = exp binop exp

exp :: = unop exp

prefixexp :: = var | functioncall | 「(」 EXP「)」

正如你看到的只是Lua的關鍵字爲零,對自己的虛假和真實的表達。其他關鍵字不是。

數學和字符串沒有Lua的關鍵字在所有。他們是類型表的變量。變量也是表達式。這就是爲什麼你沒有得到一個錯誤math == string

問題,如通過閱讀Lua的參考手冊和編程在Lua最好回答。

https://www.lua.org/docs.html

我不說,你應該知道的一切,就在那裏之前打個電話開始。但瞭解基礎知識將會加速您的學習體驗和理解!

相關問題