【发布时间】:2011-09-23 17:25:56
【问题描述】:
这是我的数组:
array = [:one,:two,:three]
我想将to_s 方法应用于我的所有数组元素以获得array = ['one','two','three']。
我怎样才能做到这一点(将可枚举的每个元素转换为其他元素)?
【问题讨论】:
标签: ruby arrays enumerable
这是我的数组:
array = [:one,:two,:three]
我想将to_s 方法应用于我的所有数组元素以获得array = ['one','two','three']。
我怎样才能做到这一点(将可枚举的每个元素转换为其他元素)?
【问题讨论】:
标签: ruby arrays enumerable
这将起作用:
array.map!(&:to_s)
【讨论】:
collect 和 collect! 是 map 和 map! 的别名。
! 是干什么用的?
! 是方法名的一部分,没有魔法,但它用来告诉你它将更改的值定义为self,而不是仅仅返回更改的值:stackoverflow.com/a/612196/540447
值得注意的是,如果您有一个对象数组,您想单独传递给具有不同调用者的方法,如下所示:
# erb
<% strings = %w{ cat dog mouse rabbit } %>
<% strings.each do |string| %>
<%= t string %>
<% end %>
您可以使用method 方法结合块扩展行为来简化:
<%= strings.map(&method(:t)).join(' ') %>
如果您不熟悉,method 所做的是将与传递给它的符号关联的方法封装在 Proc 中并返回它。 & 符号将此 Proc 扩展为一个块,该块很好地传递给 map。 map 的返回是一个数组,我们可能希望将其格式化得更好一些,因此是 join。
需要注意的是,与 Symbol#to_proc 一样,您不能将参数传递给辅助方法。
【讨论】:
array.map!(&:to_s) 将原始数组修改为['one','two','three']
array.map(&:to_s) 返回数组 ['one','two','three']。【讨论】: