是否有包含的对立面? 对于Rubyarrays?

我的代码中有以下逻辑:

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

@players是一个数组。 有没有一种方法,所以我可以避免!

理想情况下,这个片段将是:

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

ActiveSupport添加exclude? 方法到ArrayString 。 这不是纯粹的Ruby,而是被大量的ruby使用者所使用。

干得好:

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

你可能会看看Ruby风格指南了解更多类似技术的信息。

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

好的,但是,严格的,除非工作正常。

怎么样:

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

除非使用。

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

使用unless包含单个语句的罚款include? 子句,但是,例如,当你需要检查一个Array包含的东西,而不是在另一个,使用include? exclude? 更友好。

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

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

尝试这样的事情:

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

试试这个,它是纯粹的Ruby,所以不需要添加任何外围框架

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

我在一个类似的逻辑上挣扎了好几天,在检查了几个论坛和问答板之后,结果很简单。