Что такое оператор!= ~ Сравнения в рубине? Я нашел этот оператор случайно: 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 !=~
Ответ 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