将方法应用于array / enumerable中的每个元素

这是我的数组:

array = [:one,:two,:three] 

我想将to_s方法应用于所有的数组元素,以获得array = ['one','two','three']

我怎么能做到这一点(将枚举的每个元素转换为其他东西)?

这将工作:

 array.map!(&:to_s) 

值得注意的是,如果你有一个对象的数组,你想单独传入一个不同的调用方法,像这样:

 # erb <% strings = %w{ cat dog mouse rabbit } %> <% strings.each do |string| %> <%= t string %> <% end %> 

您可以使用method方法结合块扩展行为来简化:

 <%= strings.map(&method(:t)).join(' ') %> 

如果你不熟悉,用什么method封装与传递给它的符号相关联的方法并返回它。 &符将这个Proc扩展成一个块,它被很好地传递给mapmap的返回是一个数组,我们可能想更好地格式化它,因此join

需要注意的是,与Symbol#to_proc ,不能将parameter passing给helper方法。

你可以使用mapmap! 第一个将返回一个新的列表,第二个将在原地修改列表:

 >> array = [:one,:two,:three] => [:one, :two, :three] >> array.map{ |x| x.to_s } => ["one", "two", "three"] 
  • array.map!(&:to_s)将原始数组修改为['one','two','three']
  • array.map(&:to_s)返回数组['one','two','three']