`def + @`和`def - @`是什么意思?

时间:2013-05-18 12:14:49

标签: ruby

在这个Haskell-like comprehensions implementation in Ruby中,我从未在Ruby中看到过一些代码:

class Array
  def +@
    # implementation
  end

  def -@
    # implementation
  end
end

def +@def -@是什么意思?哪里可以找到关于他们的(半)官方信息?

1 个答案:

答案 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]

他们被提及here,并且有一篇关于如何定义它们的文章here