2011年10月 8日

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

下田さんの書かれたケース3を

return splitprm.each {|c| result += c.to_i}

と書き換えると、何が発生しているか、お分かりになるのではないでしょうか。

あくまでも最後に評価されているのは、「splitprm」であって、期待している「result
」ではないわけです。


少し乱暴な言い方をすると、ケース3は、

splitprm(配列)の中身をごちゃごちゃやりましたが、最終的には、splitprm の値を
返します

との記述になっています。

個人的には、何を返事するかは、オブジェクト指向として大切なことだと思っているの
で、「return」で返事の内容を明示することをお勧めしたいのですが……。


----- Original Message -----
>Date: Sat, 8 Oct 2011 01:30:33 +0900
>From: "Jun'ya Shimoda" <jun-shimo@xxxxx>
>Subject: [ruby-list:48443] 関数の戻り値について
>To: ruby-list@xxxxx (ruby mailing list)
>
>
>下田です。
>
>初心者プログラマーを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/
>
>

とみくらまさや(vzx01036@xxxxx)

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




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