2014-01-21 9 views
8

私は現在、iOSのゲーム開発のために自分自身にLuaを教えています。私は本当に言語のための文書化のレベルに感銘を受けています。それにより、それをはるかに簡単に学習できます。Luaのネストブラケットのポイントは何ですか?

私の問題は、誰も "初心者の"説明がないようなルアのコンセプトを見つけたことです。引用符の入れ子にされた括弧。

string_1 = "This is an \"escaped\" word and \"here\'s\" another." 

も引用符を囲む全体的にせずに書くことができます。例えば、私は次のようにエスケープ単一引用符と二重引用符で長い文字列があること教えられました。代わりに、次のように二重括弧で簡単に置き換えることができます。

string_2 = [[This is an "escaped" word and "here's" another.]] 

これらはどちらも完全にわかります。次のようにしかし、私はまた、二重括弧の両方のセットの間の等号を含ま「ネストされた括弧、」とstring_2行を書き込むことができます。

string_3 = [===[This is an "escaped" word and "here's" another.]===] 

私の質問は簡単です。 string_3で使用されている構文のポイントは何ですか? print()の入力として与えられるとき、string_1と同じ結果を返し、string_2となるので、ネストされた角括弧がなぜ存在するのか理解できません。誰か助けてもらえますか?

答えて

11

文字列に区切り文字に等しい部分文字列が含まれている場合に使用されます。例えば、以下は無効になります:

string_3 = [===[This is an "escaped" word, the characters ]].]===] 

I:

string_2 = [[This is an "escaped" word, the characters ]].]] 

したがって、期待通りに動作させるために、あなたは以下のように、異なる文字列の区切り文字を使用する必要があります多くの文字列リテラルにサブ文字列]]が含まれているわけではないと言うのは安全だと思います。この場合、上記の構文を使用する理由は決してないかもしれません。

+0

だから、すべてのネストされた括弧はやる」コンテナを作るですタグ "は文字列と異なる?そうすれば、 'string_3'は以下のように出力されます: – elersong

+0

これは"エスケープ "された単語です。]]]。 – elersong

+0

これは正しいですか? – elersong

1

これはよく、巣それらに役立ちます:

print [==[malucart[[bbbb]]]bbbb]==] 

出力します:

malucart[[bbbb]]]bbbb 

をしかし、それは十分に有用ではないなら、あなたは文字列で、全体のプログラムを置くためにそれらを使用することができます。

loadstring([===[print "o m g"]===])() 

が印刷されます:

o m g 

私は静的/動的ライブラリの実装に個人的に使用します。あなたは、プログラムが= sの同じ量と閉じ括弧を持っている場合、あなたはこのようなものでそれを判断すべきか分からない場合:

local c = 0 
while contains(prog, "]" .. string.rep("=", c) .. "]") do 
    c = c + 1 
end 
-- do stuff 
関連する問題