willnetの日記

 | 

2008-09-25

Array#delete_ifとArray#reject!

14:56 | Array#delete_ifとArray#reject! - willnetの日記 を含むブックマーク はてなブックマーク - Array#delete_ifとArray#reject! - willnetの日記

要素を順番にブロックに渡して評価し、その結果が真になった要素をすべて削除します。

delete_if は常に self を返しますが、reject! は要素が 1 つ以上削除されれば self を、 1 つも削除されなければ nil を返します。

http://www.ruby-lang.org/ja/man/html/Array.html#delete_if

同じかと思いきや戻り値が違う。

なんでdelete_ifは破壊的メソッドなのに!がついていないのかなー

自己代入

14:17 | 自己代入 - willnetの日記 を含むブックマーク はてなブックマーク - 自己代入 - willnetの日記

定義

式1 op= 式2

とした場合

式1 = 式1 op 式2

と評価される

定義の例外(opが&&または||のとき)

式1 op (式1 = 式2)

となる。

これは例えば

hoge ||= "foo"

としたときに、hogeに値があればhoge = hogeは実行されないよということ。

よく考えられてるなー

参考

演算子式 - Rubyリファレンスマニュアル

 |