From: Jun'ya Shimoda Date: 2011-10-08T01:30:33+09:00 Subject: [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/