2011-10-07 15 views
15

Ho trovato questo operatore per caso:Qual è l'operatore di confronto! = ~ In ruby?

ruby-1.9.2-p290 :028 > "abc" !=~ /abc/ 
=> true 

che cosa è questo? Il suo comportamento non sembra "non corrisponde".

+0

non sembra essere un vero e proprio operatore. molto probabilmente è '!' e '= ~' –

risposta

19

Questo non è un operatore, sono due operatori scritti per sembrare un operatore.

Dal operator precedence table (decrescente):

[] []=
**
! ~ + -[unario]
[diverse altre linee]
<=> == === != =~ !~

Inoltre, la classe Regexp ha un unary ~ operator:

~ rxp → intero o nullo
Match-Matches rxp contro il contenuto di $_. Equivalente a rxp =~ $_.

Quindi la tua espressione è equivalente a:

"abc" != (/abc/ =~ $_) 

E la Regexp#=~ dell'operatore (non è la stessa come il più familiare String#=~) restituisce un numero:

rxp = ~ str → intero o nulla
Match-Matches rxp contro str.

Quindi si ottiene il risultato finale perché il confronto di una stringa con un numero è falso.

Ad esempio:

>> $_ = 'Where is pancakes house?' 
=> "Where is pancakes house?" 
>> 9 !=~ /pancakes/ 
=> false 
>> ~ /pancakes/ 
=> 9 
13

!~ è l'inverso della =~ NON !=~

+0

Grazie per aver condiviso questo. – LandonSchropp

Problemi correlati