2012-04-27 10 views

Respuesta

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

ActiveSupport agrega el método exclude? tanto Array y String. Esto no es puro Ruby, pero es usado por MUCHOS rubyistas.

+1

Útil para las pruebas – Swards

+0

A menudo mucho más claro. –

+4

[Documentación aquí] (http://api.rubyonrails.org/classes/Enumerable.html#method-i-exclude-3F) – barnett

2

Uso menos.

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

Aquí van:

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

que te pueden echar un vistazo a la Ruby Style Guide para obtener más información sobre técnicas similares.

+0

Vota por la guía de estilo. Solo el material de lectura que necesitaba. – Norris

+1

legible para una declaración. si muchos, entonces, ¡mejor uso, niegue! o agrega tu propio método a la clase de matriz ruby. –

+3

¿Prefiere esto a la exclusión? responde como si fuera Ruby puro. – dscher

6

¿Qué tal:

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

Podría desestimar esto solo para evitar llamadas al nepotismo ;-) –

+0

Hombre, con la velocidad con la que las respuestas entran en este sitio, no sé si obtendré alguna reputación sin algún bien ¡nepotismo! :-D El enlace de la Guía de estilo es un buen toque. – ilasno

+2

No se trata de ser rápido. Se trata de ser exhaustivo. (He encontrado) =) –

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

Ok, pero en serio, al menos funciona bien.

+1

+1 'a menos que 'esté correcto para el fragmento mostrado, pero la condición puede ser más compleja. Creo que es útil tener estos métodos negados, permiten más código declarativo. – tokland

1

Usando unless está muy bien para declaraciones individuales con include? cláusulas, pero, por ejemplo, cuando es necesario comprobar la inclusión de algo en una Array pero no en otro, el uso de include? con exclude? es mucho más amigable.

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

Pero como dizzy42 dice anteriormente, el uso de exclude? requiere ActiveSupport

0

intentar algo como esto:

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

Prueba de esto, es pura Rubí lo que no hay necesidad de añadir ningún marcos periféricos

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

Estaba luchando con una lógica similar para un algunos días, y después de revisar varios foros y Q & A tablas con poco provecho resulta que la solución fue bastante simple.