4

私は ruby​​ を初めて使用します。誰かが 2 行目と 3 行目が何をするのか説明できますか?

a = [6,7,8]
a.send :[]=,0,2
a[0] + a.[](1) + a.send(:[],2)

最初の行は、配列を変数 a に代入しています。

私は2行目と3行目で完全に迷っています。誰かが詳細な説明をしてくれることを願っています。

ありがとう!!!

4

3 に答える 3

14

.send 指定された引数を渡して、symbol で識別されるメソッドを呼び出します。

a.send :[]=,0,2

と同じです

a.send(:[]=, 0, 2)

最初のパラメーターを、2 番目のパラメーターをとして、配列オブジェクトの[]=メソッドを呼び出すことを意味します。02

つまりa[0] = 2、配列の最初の要素を に設定し2ます。

実行後a.send :[]=,0,2aとなり[2, 7, 8]ます。

a.[](1)と同じですa[1]

a.send(:[], 2)はどちらと同じa.[](2)ですa[2]

したがって、a[0] + a.[](1) + a.send(:[],2)等号a[0] + a[1] + a[2]は等号2 +7 + 8です17

于 2012-09-21T07:36:57.873 に答える
3
a.send :[]=,0,2 ###same as a[0] = 2

a.[](1) ### same as a[1]

a.send(:[],2) ## same as  a[1]
于 2012-09-21T07:37:26.097 に答える
2

irb でコードを試して、何が起こるかを確認できます。send次のメッセージをオブジェクトに送信することを意味します。この機能は Smalltalk から継承されています。

したがってa.send :[]=,0,2、パラメータ:[]=,0,2をaに送信することを意味します。括弧は省略します。最初のパラメータ:[]=は、によって呼び出されるメソッドaです。a で始まる:ことは、それが記号であることを意味します。[]=メソッド名です。send の他のパラメータは のパラメータとして扱われます[]=

3 行目でわかる ように、C ライクな言語a.[](1)と同等です。a[1]そしてa.[]= 0,2ですa[0]=2

于 2012-09-21T07:42:25.423 に答える