13

在 Ruby 中这个类似 Haskell 的理解实现中,有一些我在 Ruby 中从未见过的代码:

class Array
  def +@
    # implementation
  end

  def -@
    # implementation
  end
end

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

4

1 回答 1

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]

它们在此处被提及,并且有一篇关于如何在此处定义它们的文章。

于 2013-05-18T12:21:12.053 回答