将方法应用于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扩展成一个块,它被很好地传递给map
。 map
的返回是一个数组,我们可能想更好地格式化它,因此join
。
需要注意的是,与Symbol#to_proc
,不能将parameter passing给helper方法。
你可以使用map
或map!
第一个将返回一个新的列表,第二个将在原地修改列表:
>> 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']
。