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)