在这个Haskell-like comprehensions implementation in Ruby中,我从未在Ruby中看到过一些代码:
class Array
def +@
# implementation
end
def -@
# implementation
end
end
def +@
和def -@
是什么意思?哪里可以找到关于他们的(半)官方信息?
答案 0 :(得分:15)
它们是一元+
和-
方法。在您撰写-object
或+object
时会调用它们。例如,语法+x
将替换为x.+@
。
考虑一下:
class Foo
def +(other_foo)
puts 'binary +'
end
def +@
puts 'unary +'
end
end
f = Foo.new
g = Foo.new
+ f
# unary +
f + g
# binary +
f + (+ g)
# unary +
# binary +
另一个不那么人为的例子:
class Array
def -@
map(&:-@)
end
end
- [1, 2, -3]
# => [-1, -2, 3]