感觉好像这里发生了一些魔术。 在哪里可以找到有关'@'符号方法的更多信息/文档?
# https://ryanbigg.com/2019/03/ruby-trickery
def -@
+self
end
答案 0 :(得分:1)
http://www.rubyinside.com/rubys-unary-operators-and-how-to-redefine-their-functionality-5610.html
总结那里写的内容,运算符通常是二进制的,但是可以是一元的:
4 - 2
'-'在这里用作二进制运算符-它对2个变量进行运算
-4
'-'现在被用作一元运算符,与用作二进制运算符的含义完全不同。
在方法定义的末尾添加@告诉ruby它是一元运算符:
class MagicString < String
def +@
upcase
end
end
str = MagicString.new("This is my string!")
+str => "THIS IS MY STRING!"
通过添加@,我们告诉ruby只希望对一个变量进行操作(我想您可以将其称为一个参数,但这在这里不太合适)