私は ruby を初めて使用します。誰かが 2 行目と 3 行目が何をするのか説明できますか?
a = [6,7,8]
a.send :[]=,0,2
a[0] + a.[](1) + a.send(:[],2)
最初の行は、配列を変数 a に代入しています。
私は2行目と3行目で完全に迷っています。誰かが詳細な説明をしてくれることを願っています。
ありがとう!!!
私は ruby を初めて使用します。誰かが 2 行目と 3 行目が何をするのか説明できますか?
a = [6,7,8]
a.send :[]=,0,2
a[0] + a.[](1) + a.send(:[],2)
最初の行は、配列を変数 a に代入しています。
私は2行目と3行目で完全に迷っています。誰かが詳細な説明をしてくれることを願っています。
ありがとう!!!
.send
指定された引数を渡して、symbol で識別されるメソッドを呼び出します。
a.send :[]=,0,2
と同じです
a.send(:[]=, 0, 2)
最初のパラメーターを、2 番目のパラメーターをとして、配列オブジェクトの[]=メソッドを呼び出すことを意味します。0
2
つまりa[0] = 2
、配列の最初の要素を に設定し2
ます。
実行後a.send :[]=,0,2
、a
となり[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
。
a.send :[]=,0,2 ###same as a[0] = 2
a.[](1) ### same as a[1]
a.send(:[],2) ## same as a[1]
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
。