2013-08-06 43 views
3

==~運營商如下所示做什麼?==〜運算符是做什麼的?

['a','b','c'].join ==~ /b/ 
# =>false 

我嘗試了一些不同的數組和字符串,並沒有收到一個語法錯誤,但==~似乎是一個正則表達式比較運算符總是返回false

+0

我不會接受我的答案,直到別人有機會寫一個更好的。我很好奇爲什麼〜/ b /是nil而不是語法錯誤或有意義的答案,並且這被視爲「==〜」而不是「= =〜」。 – Sqeaky

+1

'= =〜'沒有意義。 – sawa

+1

@sawa它會觸發一個語法。 – Sqeaky

回答

3

你說得對,==~實際上是==~但一元~有,你認爲它正則表達式的含義不同。從fine manual

〜RXP→整數或零

匹配,匹配RXP反對$_內容。相當於rxp =~ $_

$_ = "input data" 
~ /at/ #=> 7 

通常你會在使用的the switches一個包裝你的Ruby在一個隱含的循環,並設置$_一個命令行一個襯墊中~regex

考慮這個簡單的例子,你就會明白是怎麼回事:

>> $_ = 'pancakes' 
=> "pancakes" 
>> ~/pancakes/ 
=> 0 
>> 0 ==~ /pancakes/ 
=> true 
1

這實際上是兩個不同的運營商==~~是按位not或按位補碼運算符。對正則表達式使用時,它總是評估爲零。我認爲這是因爲正則表達式沒有一個有意義的按位模式。

>~/b/ 
=> nil 

當你比較零與任何東西(除了零)你會得到錯誤。

>a=60 
=> 60 
> ~a 
=> -61 

如果你有一個變量a,它是儲存60一個Fixnum,在x86其實際存儲00111100。在這種情況下,~a返回由11000011,-61表示的值。