[#48450] 1.8.7と1.9.2の挙動の違いについて — "Jun'ya Shimoda" <jun-shimo@...>

下田です。

13 messages 2011/10/09

[ruby-list:48450] 1.8.7と1.9.2の挙動の違いについて

From: "Jun'ya Shimoda" <jun-shimo@...>
Date: 2011-10-09 14:38:21 UTC
List: ruby-list #48450
下田です。

先日の関数の戻り値の勘違いの続きでやっていたら
また別の問題(?)が発生したので別スレで投稿します。
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/


In This Thread

Prev Next