我在我的代码中有以下逻辑:

if !@players.include?(p.name)
  ...
end

@players是一个数组。有什么方法可以让我避免!?

理想情况下,这个代码片段应该是:

if @players.does_not_include?(p.name)
  ...
end

当前回答

这不是一个单一的方法,但链接计数和零工作:

[1, 2, 3].count(1).zero? # => false
[1, 2, 3].count(4).zero? # => true

它也适用于字符串:

"hello".count("l").zero? # => false
"hello".count("q").zero? # => true

其他回答

module Enumerable
  def does_not_include?(item)
    !include?(item)
  end
end

好吧,但说真的,除非是可以的。

下面这个怎么样:

unless @players.include?(p.name)
  ....
end

使用unless可以用于包含单个include的语句?子句,但是,例如,当你需要检查一些东西是否包含在一个数组中,而不是另一个数组中,使用include?排除?友好多了。

if @players.include? && @spectators.exclude? do
  ....
end

但是正如dizzy42上面所说的,exclude的使用?需要ActiveSupport这样

你会用:

unless @players.include?(p.name) do
...
end

Unless是if的反义词,或者你可以用reject。

你可以拒绝非必需的元素:

@players.reject{|x| x==p.name}

在得到结果之后,你就可以开始实施了。

试试这样做:

@players.include?(p.name) ? false : true