“==~”运算符是做什么用的?

3
==~运算符在以下代码中的作用是什么?
['a','b','c'].join ==~ /b/
# =>false

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


除非其他人有机会写出更好的答案,否则我不会接受我的回答。我很好奇为什么~/b/是空的,而不是语法错误或有意义的答案,这是否被视为“== ~”,而不是“=〜”。 - Sqeaky
1
= =~ 没有意义。 - sawa
1
@sawa 它将触发一个语法。 - Sqeaky
1
@Sqeaky№╝їжђЅТІЕСй┐уће== ~Тў»тЏаСИ║~У┐љу«ЌугдТ»ћ==тњї= ~У┐љу«ЌугдС╝ўтЁѕу║ДТЏ┤жФўсђѓ - Shoe
2个回答

3

你说的没错,==~实际上是==~的组合,但对于正则表达式来说,一元的~所代表的含义与你想象中不同。根据官方手册

~ rxp → integer or nil

Match—Matches rxp against the contents of $_. Equivalent to rxp =~ $_.

$_ = "input data"
~ /at/   #=> 7
通常在使用命令行一行代码时,您会使用~regex和使用其中一个开关,将您的Ruby包装在隐式循环中并设置$_
考虑这个简单的例子,你就能明白发生了什么:
>> $_ = 'pancakes'
=> "pancakes"
>> ~/pancakes/
=> 0
>> 0 ==~ /pancakes/
=> true

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

当你将nil与任何东西(除了nil)进行比较时,结果为false。
>a=60
=> 60
> ~a
=> -61

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接