Что такое оператор!= ~ Сравнения в рубине?

Я нашел этот оператор случайно:

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

что это? Это поведение не похоже на "не соответствует".

Ответы

Ответ 1

Это не один оператор, который два оператора записываются как один оператор.

Из таблицы приоритетов операторов (от самого высокого до самого низкого):

[] []=
**
! ~ + - [унарный]
[несколько строк]
<=> == === != =~ !~

Кроме того, класс Regexp имеет унарный ~ оператор:

~ rxp → integer или nil
Match-Matches rxp против содержимого $_. Эквивалентно rxp =~ $_.

Итак, ваше выражение эквивалентно:

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

И оператор Regexp#=~ (не такой, как более знакомый String#=~) число:

rxp = ~ str → integer или nil
Match-Matches rxp против str.

Итак, вы становитесь истинным в качестве конечного результата, потому что сравнение строки с номером является ложным.

Например:

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

Ответ 2

!~ является инверсией =~ NOT !=~