2016-10-31 29 views
0

私はaという名前の配列を持ち、それを[1, 2, 3]で定義します。再帰的配列の使い方

a = [1, 2, 3] 
a << a 

と私が得る結果は次のとおりです:

次に、私は自分自身にそれをプッシュ

#=> [1, 2, 3, [...]] 

私は私が手a.lastを使用してarrayの最後の要素を取得したいときは:

a.last 
#=> [1, 2, 3, [...]] 
#even 
a.last.last.last 
#=> [1, 2, 3, [...]] 

アレイをプッシュするときに何が起こっているのですか?

はい、私はこれが再帰的な配列を作成するはずであることを理解していますが、これで何ができますか?

+5

* "私たちができること" * - 十分な '.last'とタイプすればコーヒーを作り、CPUが十分な熱を作り出すようにする...?私はここでどんな答えを期待しているのか分かりません... – deceze

+0

ルビーがこれをうまく処理しているかどうかわかりませんでした:) –

+1

@deceze実際の作業の例で '再帰的な配列 'を使う方法を知っている人がいます。 –

答えて

2

Ruby変数では、配列要素などはオブジェクト参照です。したがって、a = [1, 2, 3]を実行すると、メモリのどこかに配列があり、変数aはそのメモリへの参照です。今度はa << aを実行すると、a[4]もそのオブジェクトへの参照になります。したがって、実質的にaには、自身への参照が含まれています。

1
a = [1, 2, 3] 
a << a.dup 
a.last 
=> [1, 2, 3] 
a.last.last 
=> 3 

多分これはあなたが望むものです。これは配列の最後の項目として配列[1, 2, 3]を挿入するだけです。あなたは配列の終わりにリファレンスを置いたのですが、これは再帰的になります。