いま「プログラミングRuby」を読んでるんだけど、知らんかったことが多いなー。

4274066428

多重代入は括弧でグルーピングできる

irb(main):010:0> b, (c, d), e = [1, [2, 3], 4] => [1, [2, 3], 4] irb(main):011:0> [b, c, d, e] => [1, 2, 3, 4]

destructuring-bindっぽい。

notが警告を出すことがある

irb(main):012:0> not "foo" (irb):12: warning: string literal in condition => false irb(main):013:0> not /foo/ (irb):13: warning: regex literal in condition => true

「!」でも同じ。

defined? は文字列を返す

irb(main):018:0> defined? 1 => "expression" irb(main):019:0> defined? 1+2 => "method" irb(main):020:0> defined? :foo => "expression" irb(main):021:0> defined? "foo" => "expression" irb(main):022:0> defined? Array => "constant"

どういう時に使うんだ。

whenで配列の展開が使える

irb(main):023:0> case 1 irb(main):024:1> when *[1,2,3] irb(main):025:1> puts "ok" irb(main):026:1> end ok => nil

まぁ確かに自然ではある。

while〜do〜endだけでなく、while〜:〜endも許される

irb(main):036:0> n = 0 => 0 irb(main):037:0> while n < 3: irb(main):038:1* puts n irb(main):039:1> n += 1 irb(main):040:1> end 0 1 2 => nil

Python使いも安心 追記:1.9では無くなったそうです。

forはeachと同じだが、スコープが違う

for x in [1,2,3] ... end # ここでxは参照できる [1,2,3].each do |y| ... end # ここでyは参照できない！

補足。eachの呼び出しより前に y=0 などと初期化してあった場合は: