我在 pry REPL 中闲逛,发现了一些非常有趣的行为:波浪号方法。
看起来 Ruby 语法有一个内置的文字一元运算符~
, 就坐在那里。
这意味着~Object.new
将消息发送~
到以下实例Object
:
class Object
def ~
puts 'what are you doing, ruby?'
end
end
~Object.new #=> what are you doing, ruby?
这看起来很酷,但很神秘。Matz 是否本质上是想给我们自己的可定制的一元运算符?
我在 rubydocs 中可以找到的唯一参考是在运算符优先级注释中,它被列为最高优先级运算符,与!
andunary +
这对一元运算符有意义。(有关接下来两个优先级的有趣勘误表**
,unary -
请查看此问题。)除此之外,没有提及此实用程序。
~=,
在!~ , and
~>` 问题中,我可以通过搜索找到对这个运算符的两个值得注意的引用,即this和this。他们都注意到它的有用性、古怪性和默默无闻,而没有深入探讨它的历史。
在我即将注销~
作为为您的对象提供自定义一元运算符行为的一种很酷的方式之后,我找到了它在 ruby 中实际使用的地方——fixnum(整数)。
~2
返回-3
。~-1
返回1
。所以它否定一个整数并减去一个......出于某种原因?
任何人都可以启发我作为波浪号运算符在整个 ruby 中的独特和意外行为的目的吗?