2011-10-07 39 views
15

tôi thấy toán tử này một cách tình cờ:Toán tử so sánh! = ~ Trong ruby ​​là gì?

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

gì đây? Hành vi của nó không giống như "không khớp".

+0

Có vẻ không phải là một nhà điều hành thực sự. rất có thể đó là '!' và '= ~' –

Trả lời

19

Đó không phải là một toán tử, đó là hai toán tử được viết giống như một toán tử.

Từ operator precedence table (cao nhất đến thấp nhất):

[] []=
**
! ~ + -[unary]
[nhiều dòng hơn]
<=> == === != =~ !~

Ngoài ra, các lớp biểu thức chính quy có unary ~ operator:

~ rxp → số nguyên hoặc nil
Match-Matches rxp chống lại các nội dung của $_. Tương đương với rxp =~ $_.

Vì vậy, biểu hiện của bạn là tương đương với:

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

Regexp#=~ điều hành (không giống như quen thuộc hơn String#=~) trả về một số:

rxp = ~ str → số nguyên hoặc số 0
Đối sánh — Đối sánh rxp với str.

Vì vậy, bạn nhận được đúng như kết quả cuối cùng của bạn bởi vì so sánh một chuỗi với một số là sai.

Ví dụ:

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

!~ là nghịch đảo của =~ KHÔNG !=~

+0

Cảm ơn bạn đã chia sẻ điều này. – LandonSchropp

Các vấn đề liên quan