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

下田です。

13 messages 2011/10/09

[ruby-list:48443] 関数の戻り値について

From: "Jun'ya Shimoda" <jun-shimo@...>
Date: 2011-10-07 16:30:33 UTC
List: ruby-list #48443
下田です。

初心者プログラマーをRuby信者にしてしまおうと色々教えてたら
変な挙動なのではないかと思われる事があったので報告します。

理解不足な点はご教示いただけると幸いです。


ケース.1
def calc(prm)
   prm.split(//)
end

ケース.2
def calc(prm)
   prm.split(//)
   result = 0
end

ケース.3
def calc(prm)
   splitprm = prm.split(//)
   result = 0
   splitprm.each do |c|
     result += c.to_i
   end
end

ケース.4
def calc(prm)
   splitprm = prm.split(//)
   result = 0
   splitprm.each do |c|
     result += c.to_i
   end
   result
end


以上の4ケースを
printf (calc ARGV[0]).to_s + "¥n"
で呼び出しました。

ruby1.8.7(2008-08-11 patchglevel 72) [i386-cygwin]
と
ruby1.9.2p290(2011-07-09 revision 32553) [x86_64-linux]
で試してみたところ


ケース.1
1234(1.8.7)
["1", "2", "3", "4"](1.9.2)

ケース.2
0

ケース.3
1234(1.8.7)
["1", "2", "3", "4"](1.9.2)

ケース.4
10


となりました。
私がわからないのはケース.3なのですが
Rubyは最後に評価された値を返すはずですから
10を期待していましたが
結果はsplitされた文字の配列でした。
また、ケース.2ではresult = 0が評価されていると言う結果なのに
ケース.3ではその行すらも評価されないというのが2重にわかりませんでした。

これはバグなのでしょうか?仕様なのでしょうか?

以上よろしくお願いします。


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