2012-04-27 13 views

risposta

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

ActiveSupport aggiunge il metodo exclude? sia Array e String. Questo non è puro rubino, ma è usato da un sacco di rubini.

+1

Utile per le prove – Swards

+0

Spesso molto più chiaro. –

+4

[Documentazione qui] (http://api.rubyonrails.org/classes/Enumerable.html#method-i-exclude-3F) – barnett

2

Usa a meno.

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

Qui si va:

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

si potrebbe avere uno sguardo alla Ruby Style Guide per più informazioni tecniche simili.

+0

Upvote per la guida di stile. Solo il materiale di lettura di cui avevo bisogno. – Norris

+1

leggibile per una dichiarazione. se molti poi meglio usare negare! o aggiungi il tuo metodo alla classe di ruby ​​array. –

+3

Preferisci questo all'esclusione? rispondi dato che è puro Ruby. – dscher

6

ne dite:

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

Potrei preferire questo solo per evitare le chiamate al nepotismo ;-) –

+0

Uomo, con la velocità con cui le risposte entrano in questo sito, non so se otterrò una reputazione senza qualche buona -o il nepotismo! MrGreen Il link della Guida allo stile è un bel tocco. – ilasno

+2

Non si tratta di essere veloci. Si tratta di essere completo. (Ho trovato) =) –

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

Ok, ma sul serio, il meno che opere eccellenti.

+1

+1 'a meno che non sia ok per lo snippet mostrato, ma la condizione potrebbe essere più complessa. Penso che sia utile avere questi metodi negati, che consentono più codice dichiarativo. – tokland

1

Utilizzando unless va bene per le dichiarazioni con i singoli include? clausole, ma, per esempio, quando è necessario controllare l'inserimento di qualcosa in una Array, ma non in un altro, l'utilizzo di include? con exclude? è molto più amichevole.

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

Ma, come dizzy42 dice sopra, l'uso di exclude? richiede ActiveSupport

0

provare qualcosa di simile:

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

Prova questa, è puro Rubino quindi non c'è bisogno di aggiungere eventuali quadri periferici

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

Ero alle prese con una logica simile per un pochi giorni, e dopo aver controllato diversi forum e Q & A schede poco disponibili risulta che la soluzione era in realtà piuttosto semplice.

Problemi correlati