2011年10月 8日

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

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




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