私は私のコードでは、次のロジックを持っている:インクルードの反対側にありますか? Ruby配列のために?
if [email protected]?(p.name) do
...
end
@players
は配列です。私は!
を避けることができる方法はありますか?
理想的には、このスニペットは次のようになります。
if @players.does_not_include?(p.name) do
...
end
私は私のコードでは、次のロジックを持っている:インクルードの反対側にありますか? Ruby配列のために?
if [email protected]?(p.name) do
...
end
@players
は配列です。私は!
を避けることができる方法はありますか?
理想的には、このスニペットは次のようになります。
if @players.does_not_include?(p.name) do
...
end
if @players.exclude?(p.name) do
...
end
activesupportのはArray
とString
両方にexclude?
メソッドを追加します。これは純粋なRubyではなく、たくさんのRubyistsによって使用されています。
使用しない限り。ここで
unless @players.include?(p.name) do
...
end
方法について:
unless @players.include?(p.name) do
....
end
私はネポティズムへの呼び出しを避けるためにちょうどdownvoteかもしれません;-) –
人は、このサイトで答えが来るスピードで、私はいくつかの良いなしで任意の評判を取得するか分からない-ole nepotism!スタイルガイドのリンクは素敵です。 – ilasno
それは高速ではない。それは徹底していることです。 (私が見つけました)=) –
module Enumerable
def does_not_include?(item)
!include?(item)
end
end
[OK]を、しかし真剣に、いない限りは正常に動作します。
+1スニペットが表示されていればOKではありませんが、条件はもっと複雑かもしれません。私は、これらの無効化されたメソッドを持つことは便利だと思います。より宣言的なコードを許可します。 – tokland
あなたは1 Array
で何かを含めることを確認する必要があるときunless
を使用することではなく、他に、exclude?
とinclude?
の使用は非常に友好的である、例えば、単一include?
句を持つ文の罰金ですが。
if @players.include? && @spectators.exclude? do
....
end
しかしdizzy42は、上記の言うように、exclude?
の使用はactivesupportの
はこのような何か試してみてください必要があります。それはそうすべての周辺のフレームワークを追加する必要はありません、純粋なRubyの、これを試してみてください
@players.include?(p.name) ? false : true
を
if @players.include?(p.name) == false do
...
end
私は同じようなロジックで苦労していました。数日、そしていくつかのフォーラムとQ &をチェックしたあと、少し役に立ったボードは、実際にはかなり単純でした。
テストに便利 – Swards
多くの場合、はるかに明確です。 –
[Documentation here](http://api.rubyonrails.org/classes/Enumerable.html#method-i-exclude-3F) – barnett