Ruby 初心者スレッド Part 55
■ このスレッドは過去ログ倉庫に格納されています
0795デフォルトの名無しさん
2014/11/11(火) 22:41:18.34ID:wcU8x7LdRuby のメソッド呼び出しでパラメタの頭に * を付けると、パラメタを展開して渡す
つまり、
Test.new(*Array.new(10))
というコードは、以下と同じ
ary = Array.new(10)
Test.new(ary[0], ary[1], ary[2], ary[3], ary[4], ary[5], ary[6], ary[7], ary[8], ary[9])
で、一般に手続き/関数/メソッドの引数は言語処理系内部のスタック上もしくはヒープ上に割り当てられる
Ruby の場合には、メソッド new によるオブジェクト生成時にはスタックを使っていて、
それがオーバーフローした(=システムスタックの上限を越えて溢れた)のだろうね
いずれにせよ、10 ** 5 個もの引数を渡すコードは非常識だから、予期しないエラーとなっても不思議ではない
>>794 のコードを
Test.new(Array.new(10 ** 5))
と書き直せば(=パラメタの頭に付けた * を外せば)、期待した動作になるはずだよ
■ このスレッドは過去ログ倉庫に格納されています