3

==~操作员在下面做什么?

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

我尝试了一些不同的数组和字符串,但从未收到语法错误,但==~似乎是一个总是返回的正则表达式比较运算符false

4

2 回答 2

3

你说得对,==~实际上是这样==~但一元~对正则表达式的含义与你认为的不同。来自精美手册

~ rxp → 整数或零

匹配 -将rxp$_. 相当于rxp =~ $_

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

通常,您会~regex在命令行中使用一个衬垫,该衬垫使用将 Ruby 包装在隐式循环中的开关$_之一并设置.

考虑这个简单的例子,你会看到发生了什么:

>> $_ = 'pancakes'
=> "pancakes"
>> ~/pancakes/
=> 0
>> 0 ==~ /pancakes/
=> true
于 2013-08-06T21:03:42.197 回答
1

这实际上是两个不同的运算符==~~是按位not或按位补码运算符。当用于正则表达式时,它总是计算为零。我认为这是因为正则表达式没有有意义的按位模式。

>~/b/
=> nil

当您将 nil 与任何东西(nil 除外)进行比较时,您会得到错误的结果。

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

如果您有一个变量a并且它存储 60 作为 Fixnum,则在 x86 上它实际存储00111100. 在这种情况下,~a返回由11000011-61 表示的值。

于 2013-08-06T20:32:17.687 回答