なにでぐぐってたのか忘れたけどこのページみてたらcase文を変数に入れてたのでびびった。
http://bojovs.github.com/2012/04/24/ruby-coding-style/
kind = case year when 1850..1889 then 'Blues' when 1890..1909 then 'Ragtime' else 'Jazz' end
やってみたらまじでできる。
[9] pry(main)> year = 1970 => 1970 [10] pry(main)> kind = case year [10] pry(main)* when 1850..1889 then 'Blues' [10] pry(main)* when 1890..1909 then 'Ragtime' [10] pry(main)* else 'Jazz' [10] pry(main)* end => "Jazz"
まじかと思って調べてみたら、制御構造は式であって何らかの値を返すものがあるとか書いてあった。
http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fcontrol.html
if 式は、条件が成立した節(あるいは else 節)の最後に評価し た式の結果を返します。else 節がなくいずれの条件も成り立たなけれ ば nil を返します。
[20] pry(main)> a = if 1 == 1 then true else false end => true [21] pry(main)> a = if 1 == 2 then true else false end => false
while は nil を返します。また、引数を伴った break により while 式の戻り値をその値にすることもできます。
[33] pry(main)> i = 0 => 0 [34] pry(main)> a = i+=1 while i < 60 => nil [36] pry(main)> i = 0 => 0 [37] pry(main)> a = while i < 60 [37] pry(main)* break 20 [37] pry(main)* end => 20
他にもunlessとかuntilとかforも普通に返すし、breakやnextも返す。
まじ勉強になる。