2008-08-19
■ [ruby] Rubyの意外な機能とか
いま「プログラミング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]
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 などと初期化してあった場合は:
- 1.8
- yはeachより後でも参照でき、3になる。
- 1.9
- yはeachより後でも参照できるが、0のまま。
':' の機能は1.9でなくなってますー
おお、本当だ!<br>ありがとうございます。追記しておきました。