如何在阵列上映射方法?

时间:2012-10-08 21:03:32

标签: ruby

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

def f(x)  
  x + 1  
end

我想做的是将它映射到类似的可枚举:

(1..10).map &f

显然无法提出ArgumentError: wrong number of arguments (0 for 1) 错误。我知道我可以像块一样调用这个方法:

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

但它对我来说看起来不是一个优雅的解决方案。还有什么可以做的?

2 个答案:

答案 0 :(得分:4)

您可以使用:

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

答案 1 :(得分:2)

首先,我认为这个

没有任何不雅
(1..10).map {|x| f x }

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

class Fixnum
  def f
    self + 1
  end
end

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

在这两种方法之间,我会在任何一天拿到第一种方法。