2017-05-30 5 views
-6

我々は入力します。なぜLuaの==はこのように動作していますか? Luaのインタプリタで

>print(1=="1") 
false 

[OK]を罰金を!

>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それは事です!文字列と数学は標準ライブラリの一部です。もし文字列と数学が偽であるなら、それらは等しくなるような意味を持たないからです。関数とnilもfalseでなければならないが、そうではない。代わりにエラーがスローされます。 –

答えて

6
print(function==nil) 

はあなたにエラーメッセージが表示されます説明してください:

標準入力:1: '(' functionを定義するために使用されるキーワードです

ので '==' の近くに期待そのキーワードは特定の構文で使用されることが期待されていますfunctionはそれ自体で有効なLua式ではないため、1つとして使用することはできません。通常は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標準ライブラリです。文字列と数学は2つの異なるLuaテーブルです。したがって、それらは同じであることはできません。したがって、式string == mathはfalseです。

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

のLuaでの基本的な式は次のとおりです。

EXP :: = prefixexp

EXP :: = nilを|偽|真

EXP :: =数字

EXP :: = LITERALSTRING

EXP :: = functiondef

EXP :: = tableconstructor

EXP :: = '...'

exp :: = exp binop exp

exp :: = unop exp

prefixexp :: = var | functioncall | '(' exp ')

表示されているように、Luaキーワードnil、false、trueは表示されています。他のキーワードはそうではありません。

mathとstringにはLuaキーワードがありません。それらはテーブル型の変数です。また、変数も式です。だからあなたはエラーを受け取りませんmath == string

質問は、LuaのリファレンスマニュアルとLuaでのプログラミングを読むことで最もよく答えられます。

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

私はあなたが開始beforそこにあるすべてを知っているべきであると言うことはありません。しかし、非常に基本的なことを知ることは、あなたの学習経験とあなたの理解を加速させます!

関連する問題