2011-11-15 6 views
3

私はLuaプログラミング(第2版)からLuaを学び始めています。私は本の中で以下のことを理解していませんでした。Luaの関数

network = { 
      {name ="grauna", IP="210.26.30.34"}, 
      {name ="araial", IP="210.26.30.23"}, 
} 

我々はフィールド名でテーブルをソートしたい場合は、著者はここで起こっていただきました

table.sort(network, function (a,b) return (a.name > b.name) end } 

に言及していますか?関数(a、b)は何を表していますか?関数はキーワードか何かですか?

の場合はそれで遊んで、テーブルの順序

order={x=1,x=22,x=10} // not sure this is legal 

を作成し、その後、私は任意の出力を取得していない

print (table.sort(order,function(a,b) return (a.x > b.x) end)) 

をしましたました。どこが間違っていますか?

おかげ

答えて

8

それは2つの引数を取り、最初の引数が二番目の引数より小さい場合trueを返しanonymous functionです。 table.sort()は、ソートが必要な要素ごとにこの関数を実行し、各要素を前の要素と比較します。 LUAで

+0

私は論理を理解しました。私の質問はなぜ機能(a、b)を機能がキーワードにするのかということでした。 – Ank

+0

@Ankur、はい、それはキーワードです。関数を定義します。 'function name()'として使用すると、それは名前付き関数を定義します。 'function()'と同じように使うと、それは無名関数を定義します。言語マニュアルから[セクション2.5.9](http://www.lua.org/manual/5.1/manual.html#2.5.9)を見てください。 – rid

+0

okありがとう..何かが意味をなさない...質問の第2部分に何が間違っていたか。なぜ出力が得られなかったのですか? – Ank

2

functionは、しかし、私は(つまり、私が思うclosures

+0

ありがとう..理にかなっています..なぜ、質問の第2部分はなぜ機能しませんでしたか? – Ank

3

閉じた変数で無名関数を導入すること、OCamlではスキームやCommon Lispではlambda(&もパイソン)、またはfunに類似のキーワードであり、 order={x=1,x=22,x=10}が値10に関連付けられているキー"x"とテーブル、order={x=10}としてLuaので同じ意味を持っていること)を確認してくださいません。たぶん{{x=1},{x=22},{x=10}}の意味は、それぞれがキー"x"を持つ3つのコンポーネントの「配列」を作ることです。

+0

ええと..それは私がそれをしなければならなかったことを推測する.. – Ank

3

質問の2番目の部分に答えるには:Luaは非常に小さく、テーブルを直接印刷する方法はありません。

print(unpack(some_table)) 

unpack({1, 2, 3})戻り1, 2, 3:あなたがリストまたは配列としてテーブルを使用する場合は、これを行うことができます。非常に便利な機能。

+0

うわー!役に立つ!ちゃんと覚えておきますよ。 – Ank

関連する問題