2012-05-05 3 views
1

Arrayクラスのto_aryメソッドを調べました。メソッドがソースドキュメントにどのように関係しているのか混乱しています。私はこれを行う場合はRuby 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] 

をなぜ属性静的な値が必要なのか? VALUEはリトリーバーですか?引数間のスペース(コンマではなく)は、第2引数が受信側から呼び出されるメソッドであることを意味しますか?

static VALUE 

rb_ary_to_ary_m(VALUE ary) 
{ 
    return ary; 
} 

ベスト、

cj3kim

+0

'static VALUE'は、関数が' VALUE'を返すと宣言していますが、@ LBgは実行されているので、すべてCです。 – Ashe

答えて

2

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

def to_ary 
    return self 
end 
+0

ありがとうございました! – cj3kim

1

は、それが配列としてそれを処理して、IRBが画面にそれをプッシュする印刷方法を使用していること、です。 Printはto_aryを文字列に変換します。したがって、違いは見られません。putsを使用すると違いが見えます。背景はto_aryを使用し、印刷はto_sを使用します。

to_aryの方法は暗黙の変換用です。to_aは明示的な変換用です。良い例は、flattenというメソッドです。これは、多次元配列をとり、それを特異次元配列にフラット化します。危険なメソッドを使用しない限り、実際の変数は、flattenメソッドを連結していない状態で引き続き使用する場合と同じままです。これは、flattento_aryでなく、to_aであるのに対し、flatten!ではto_aを使用しているからです。 to_aryは、そのインスタンスの配列のように扱いますが、変数を永久に変更するわけではありません。