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

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

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

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

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

当前回答

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

ActiveSupport添加排除?数组,散列和字符串。这不是纯Ruby,但是被很多Ruby爱好者使用。

来源:活动支持核心扩展(Rails指南)

其他回答

使用,除非:

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

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

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

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

如果你对!-操作符的反对主要是它需要放在你的检查符前面,这会破坏你的输入流程,那么就有。!方法。你只需要把它放在check之后来反转布尔值:

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

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

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

简单的解决方案:

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

试试这样做:

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