0

假设我有一个方法(实际上是一个助手):

def f(x)  
  x + 1  
end

我想要做的是将它映射到这样的枚举上:

(1..10).map &f

显然它不会引发ArgumentError: wrong number of arguments (0 for 1) 错误。我知道我可以像这样在块中调用这个方法:

(1..10).map {|x| f x }

但这对我来说似乎不是一个优雅的解决方案。对此还能做些什么?

4

2 回答 2

4

你可以使用:

(1..10).map(&method(:f))
于 2012-10-08T21:07:02.643 回答
2

首先,我看不出这有任何不雅之处

(1..10).map {|x| f x }

通常,您应该使用它。但是,在特殊情况下,可以使用一种特殊的形式(您需要在对象上调用方法并且该方法不接受参数)。

class Fixnum
  def f
    self + 1
  end
end

(1..10).map(&:f)

在这两种方法之间,我每天都会采用第一种。

于 2012-10-08T21:09:41.767 回答