トップ «前の日記(2008-08-13) 最新 次の日記(2008-08-20)» 編集

Route 477



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]

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 などと初期化してあった場合は:

1.8
yはeachより後でも参照でき、3になる。
1.9
yはeachより後でも参照できるが、0のまま。
本日のツッコミ(全2件) [ツッコミを入れる]
きむら(K) (2008-08-23 01:04)

':' の機能は1.9でなくなってますー

yhara (2008-08-23 11:16)

おお、本当だ!<br>ありがとうございます。追記しておきました。