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

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

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

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

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

当前回答

我自己查了一下,发现了这个,然后找到了解。人们使用令人困惑的方法,有些方法在某些情况下不起作用,或者根本不起作用。

我知道现在太晚了,因为这是6年前发布的,但希望未来的访问者能找到它(希望它能清理他们和你的代码)。

简单的解决方案:

if not @players.include?(p.name) do
  ....
end

其他回答

下面这个怎么样:

unless @players.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

给你:

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

您可以查看Ruby Style Guide以获得有关类似技术的更多信息。

我自己查了一下,发现了这个,然后找到了解。人们使用令人困惑的方法,有些方法在某些情况下不起作用,或者根本不起作用。

我知道现在太晚了,因为这是6年前发布的,但希望未来的访问者能找到它(希望它能清理他们和你的代码)。

简单的解决方案:

if not @players.include?(p.name) do
  ....
end
module Enumerable
  def does_not_include?(item)
    !include?(item)
  end
end

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