【问题标题】:What does the ==~ operator do?==~ 运算符是做什么的?
【发布时间】:2013-08-08 00:48:03
【问题描述】:

==~ 运算符的作用如下?

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

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

【问题讨论】:

  • 在其他人有机会写出更好的答案之前,我不会接受我的答案。我很好奇为什么 ~/b/ 是 nil 而不是语法错误或有意义的答案,这是否被视为“== ~”而不是“= =~”。
  • = =~ 没有意义。
  • @sawa 它会触发一个语法。
  • @Sqeaky,它选择== ~,因为~ 运算符优先于===~ 运算符。

标签: ruby regex operators


【解决方案1】:

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

>~/b/
=> nil

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

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

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

【讨论】:

    【解决方案2】:

    你说得对,==~ 实际上是 ==~,但是一元 ~ 对于正则表达式的含义与你认为的不同。来自fine manual

    ~ rxp → 整数或零

    Match - 将 rxp$_ 的内容进行匹配。相当于rxp =~ $_

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

    通常你会在命令行中使用~regex 一个使用the switches 之一的衬垫,它将你的Ruby 包装在一个隐式循环中并设置$_

    考虑这个简单的例子,你就会明白发生了什么:

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

    【讨论】:

      猜你喜欢
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      相关资源
      最近更新 更多