在 Ruby 中这个类似 Haskell 的理解实现中,有一些我在 Ruby 中从未见过的代码:
class Array
def +@
# implementation
end
def -@
# implementation
end
end
是什么def +@
意思def -@
?在哪里可以找到有关他们的(半)官方信息?
在 Ruby 中这个类似 Haskell 的理解实现中,有一些我在 Ruby 中从未见过的代码:
class Array
def +@
# implementation
end
def -@
# implementation
end
end
是什么def +@
意思def -@
?在哪里可以找到有关他们的(半)官方信息?
它们是一元+
和-
方法。当您编写-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]