1

Arrayクラスのto_aryメソッドを調べました。メソッドがそのソースドキュメントにどのように関連しているか混乱しています。

to_aryメソッド=>自己を返します

私がこれを行う場合:

1.9.3-p0 :013 > a = [1,33,42]
=> [1, 33, 42] 
1.9.3-p0 :014 > a.to_ary
=> [1, 33, 42] 
1.9.3-p0 :015 > a
=>[1, 33, 42] 

属性staticVALUEが必要なのはなぜですか?VALUEはレトリバーですか?引数の間に(コンマではなく)スペースがあるということは、2番目の引数が受信者によって呼び出されるメソッドであることを意味しますか?

static VALUE

rb_ary_to_ary_m(VALUE ary) 
{
   return ary;
}

一番、

cj3kim

4

2 に答える 2

2

これはCコードです。RubyインタプリタはC言語で書かれています。このコードでは、最初の引数はとして使用されselfます。ルビーの同等物は次のようになります。

def to_ary
  return self
end
于 2012-05-05T23:08:54.967 に答える
1

ここで起こっていることは、それを配列として扱い、IRBがprintメソッドを使用してそれを画面にプッシュしているということです。Printはto_aryを文字列に変換するため、違いは見られません。putsを使用すると違いが見られます。使用法to_aryをバックグラウンドで配置しますが、印刷では使用しますto_s

このto_ary方法は暗黙的な変換用でto_aあり、明示的な変換用です。良い例はflatten、多次元配列を取り、それを単次元配列に平坦化するメソッドです。危険な方法を使用しない限り、flatten方法の連結を使用し続けると、実際の変数は以前と同じままになります。これは、を使用し、flattenを使用to_aryしないto_aのに対し、flatten!を使用するためto_aです。to_aryそのインスタンスの配列のように扱いますが、変数を永続的に変更することはありません。

于 2015-11-21T16:28:39.703 に答える