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