2011年10月 9日

[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/

投稿者 xml-rpc : 2011年10月 9日 23:38
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/106836
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。