Array#select!
と Parameters#select!
の返り値が違う
-
Array
の方は,ブロックの返り値の全部がtrue
を返した場合にnil
を返している- 変化が無いので
self
を返さないとのこと
- 変化が無いので
-
ActionController::Parameters
の方は,最後にself
を強制的に返すようになっている
普通はひっかからないと思うけど,これに依存したコードを書くのは良くなさそうなので,一応記す.
→ select!
を使わないだろう.の意
Refs
a = %w{ a b c d e f }
a.select! {|v| v =~ /[a-z]/ } # => nil
a # => ["a", "b", "c", "d", "e", "f"]
Equivalent to Hash#keep_if, but returns nil if no changes were made.
def select!(&block)
@parameters.select!(&block)
self
end
keep_if は常に self を返します。 filter! と select! はオブジェクトが変更された場合に self を、されていない場合に nil を返します。