From: "Y. Nobuoka" Date: 2011-10-08T02:18:18+09:00 Subject: [ruby-list:48444] Re: 関数の戻り値について 信岡です。 > 私がわからないのはケース.3なのですが > Rubyは最後に評価された値を返すはずですから > 10を期待していましたが > 結果はsplitされた文字の配列でした。 > また、ケース.2ではresult = 0が評価されていると言う結果なのに > ケース.3ではその行すらも評価されないというのが2重にわかりませんでした。 文面から察するに、ケース 3 の calc メソッドの中で最後に評価される式が splitprm.each メソッドに渡されたブロックの中の result += c.to_i であると思っているのではないかと思いますが、それは正しくありません。 calc メソッドの中で最後に評価される式は splitprm.each do |c| result += c.to_i end です。 すなわち splitprm.each というメソッド呼び出しの返り値がそのまま calc メソッドの返り値になります。 (そして Array#each メソッドは self を返すので、calc メソッドの返り値は splitprm の 参照先と同一です。) 以下のように書き換えるとわかりやすいのではないでしょうか。 ケース 3' (ケース 3 とほぼ等価) def calc( prm ) splitprm = prm.split( // ) result = 0 b = Proc.new{ |c| result += c.to_i } splitprm.each( &b ) end > これはバグなのでしょうか?仕様なのでしょうか? そんなわけなんでバグではないですね。 -- 信岡 ゆう (NOBUOKA Yu)