From: Jun'ya Shimoda Date: 2011-10-09T23:38:21+09:00 Subject: [ruby-list:48450] 1.8.7と1.9.2の挙動の違いについて 下田です。 先日の関数の戻り値の勘違いの続きでやっていたら また別の問題(?)が発生したので別スレで投稿します。 subjectをもう少し詳しく書きたかったのですが 挙動が違うという以外に何かを特定できなかったのでご容赦ください。 先日Naruseさんにアドバイス頂いたロジックよりも ダサいのは承知してます。 ここではロジックではなく1.8.7と1.9.2で下記のプログラムで どうして挙動が違うのか教えてください。 プログラム. 1 ---------- def calc(prm) res = 0 if prm.length > 1 res = prm[0].to_i + calc(prm[1, prm.length-1]).to_i else res += prm[0].to_i end if res.to_s.length > 1 return calc(res.to_s) else return res end end printf (calc ARGV[0]).to_s + "\n"; ---------- このプログラムを引数「1234」で実行すると 1.8.7では「stack level too deep」 1.9.2では「10」となります(期待値) 次に プログラム. 2 ---------- def calc(prm) res = 0 if prm >= 10 res = prm.to_s.slice(0).to_i + calc(prm.to_s.slice(1, prm.to_s.length-1).to_i) else return res += prm end end printf (calc ARGV[0].to_i).to_s + "\n" ---------- を同じく引数「1234」で実行すると 1.8.7では「154」 1.9.2では「10」(期待値) 引数「1354」で実行すると 1.8.7では「160」 1.9.2では「16」(期待値) となります。 この挙動の違いの理由がわかりません。 1.8.7はpatchlevel 352 1.9.2はp290 revision 32553 です。 以上ご教示のほどよろしくお願いします。 -- A A Name : 下田 純也 (Jun'ya Shimoda) (o'.'o) _/ e-mail : jun-shimo@nifty.com (> ~<)/ Blog : http://d.hatena.ne.jp/JironBach/ Twitter: http://twitter.com/JironBach/