==~
操作员在下面做什么?
['a','b','c'].join ==~ /b/
# =>false
我尝试了一些不同的数组和字符串,但从未收到语法错误,但==~
似乎是一个总是返回的正则表达式比较运算符false
。
你说得对,==~
实际上是这样==
,~
但一元~
对正则表达式的含义与你认为的不同。来自精美手册:
~ rxp → 整数或零
匹配 -将rxp与
$_
. 相当于rxp =~ $_
。$_ = "input data" ~ /at/ #=> 7
通常,您会~regex
在命令行中使用一个衬垫,该衬垫使用将 Ruby 包装在隐式循环中的开关$_
之一并设置.
考虑这个简单的例子,你会看到发生了什么:
>> $_ = 'pancakes'
=> "pancakes"
>> ~/pancakes/
=> 0
>> 0 ==~ /pancakes/
=> true
这实际上是两个不同的运算符==
和~
。~
是按位not
或按位补码运算符。当用于正则表达式时,它总是计算为零。我认为这是因为正则表达式没有有意义的按位模式。
>~/b/
=> nil
当您将 nil 与任何东西(nil 除外)进行比较时,您会得到错误的结果。
>a=60
=> 60
> ~a
=> -61
如果您有一个变量a
并且它存储 60 作为 Fixnum,则在 x86 上它实际存储00111100
. 在这种情况下,~a
返回由11000011
-61 表示的值。