2011-02-01 15 views
7

Non riesco a capire cosa sto facendo male qui ..Come restituire un valore booleano da una regex

if @calc.docket_num =~ /DC-000044-10/ || @calc.docket_num =~ /DC-67-09/ 
    @calc.lda = true 
else 
    @calc.lda = false 
end 

Ma sembra che @calc.docket_num può essere qualsiasi stringa di alcun tipo e ritorna sempre come true.

Non sto facendo questo giusto?

+0

Durante il test del codice, restituisce effettivamente "nil" (equivalente a "false" per l'istruzione if/else) per qualsiasi valore diverso da "DC-000044-10" o "DC-67-09" ... –

risposta

32

Si tratta di un one-liner:

@calc.lda = !!(@calc.docket_num =~ /DC-000044-10|DC-67-09/) 

Il !! forza la risposta al vero/falso, allora è possibile assegnare direttamente la variabile booleana.

+2

+1 per l'uso di '!!'. La regex potrebbe essere un po 'più stretta però: '/ DC - (?: 000044-10 | 67-09) /' –

+4

Impressionante. Mai saputo di '!!'. – CambridgeMike

+1

Ho cercato su Google la stessa domanda e ho trovato la mia domanda di un anno fa e ho trovato la tua risposta che è incredibile. Grazie molto. – Trip

2

Penso che il problema sia da qualche altra parte nella vostra implementazione. Utilizzare questo codice per controllarlo:

 
k = 'random information' 

if k =~ /DC-000044-10/ || k =~ /DC-67-09/ 
    puts 'success' 
else 
    puts 'failure' 
end 

=> failure 
+2

Questo può essere abbreviato usando l'operatore ternario: 'puts (k = ~/DC - (? 000044-10 | 67-09) /)? 'successo': 'fallimento' –

4

In alternativa, è possibile utilizzare l'operatore triple equals (===) per la classe Regexp che viene utilizzato per determinare l'uguaglianza quando si utilizza la sintassi case.

@calc.lda = /DC-000044-10|DC-67-09/ === @calc.docket_num 
@calc.lda 
=> true 

BEWARE

/Regexp/ === String è totalmente diverso String === /Regexp/ !!!! Il metodo non è commutativo. Ogni classe implementa === in modo diverso. Per la domanda sopra, l'espressione regolare deve essere a sinistra di ===.

Per l'implementazione Regexp, è possibile visualizzare più documentazione su questo (a partire da Ruby 2.2.1) here.

+0

Ah ottima idea !! – Trip

Problemi correlati