I\'ve got the following logic in my code:
if !@players.include?(p.name)
...
end
@players
is an array. Is there a method so
Looking at Ruby only:
TL;DR
Use none?
passing it a block with ==
for the comparison:
[1, 2].include?(1)
#=> true
[1, 2].none? { |n| 1 == n }
#=> false
Array#include? accepts one argument and uses ==
to check against each element in the array:
player = [1, 2, 3]
player.include?(1)
#=> true
Enumerable#none? can also accept one argument in which case it uses ===
for the comparison. To get the opposing behaviour to include?
we omit the parameter and pass it a block using ==
for the comparison.
player.none? { |n| 7 == n }
#=> true
!player.include?(7) #notice the '!'
#=> true
In the above example we can actually use:
player.none?(7)
#=> true
That's because Integer#==
and Integer#===
are equivalent. But consider:
player.include?(Integer)
#=> false
player.none?(Integer)
#=> false
none?
returns false
because Integer === 1 #=> true
. But really a legit notinclude?
method should return true
. So as we did before:
player.none? { |e| Integer == e }
#=> true
Use unless
:
unless @players.include?(p.name) do
...
end
Try something like this:
@players.include?(p.name) ? false : true
Here you go:
unless @players.include?(p.name)
...
end
You might have a look at the Ruby Style Guide for more info on similar techniques.
if @players.exclude?(p.name)
...
end
ActiveSupport adds the exclude? method to Array
, Hash
, and String
. This is not pure Ruby, but is used by a LOT of rubyists.
Source: Active Support Core Extensions (Rails Guides)