2012-10-04 1 views
35

keep_ifと思われます。RubyでArray#rejectの反対は何ですか?

もしそうなら、それはなぜkeepと呼ばれていませんか?

+3

http://www.ruby-doc.org/core-1.9.3/Array.htmlを見ると、 'keep_if'は確かに反対です(同じロジックですが、' true'との比較を反転します)。 falseにする)。これはメソッド名に関する質問ですか? – bdares

+0

@bdares 'keep_if'は' reject'と同じロジックを持っていません。しかし、それは 'reject! 'と同じロジックを持つかもしれません。 –

答えて

75
  • rejectの反対側は、(新しい配列を返す)
  • reject!の反対select!である(代わりに、配列を編集)
  • keep_ifの反対delete_ifある(代わりに、配列を編集)selectあります
2

私はそれがよく考えられたセマンティクスと関係していると思いますが、それは正しいと主張したいと思います。すでに「t1、t2、t3」のセットがあるとしましょう。サブセットを拒否すると、「私はt1とt2を拒否する」と言います。あなたはあなたの行動(あなたの拒否)によって影響を受けないので、t3は言及していません。デフォルトは "keep"です。しかし、あなたが何を保つつもりであるかを表現していて、「私はt1とt2を保ちます」と言うと、t3の状態が疑問になります。結局のところt1とt2があります。暗黙のうちにt3を維持しているので、それらを保持し直してください(彼らはすでにデフォルト状態になっています、 "keep")。 "keep_if"という構文を使用することで、何が保持され、何が破棄されるかを決定する条件(単純または複合)が明示的に示されます。

関連する問題