这是我的数组:
array = [:one,:two,:three]
我想将to_s
方法应用于我的所有数组元素以获取array = ['one','two','three']
.
我该怎么做(将可枚举的每个元素转换为其他元素)?
这是我的数组:
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 中并返回它。& 符号将此 Proc 扩展为一个块,该块可以map
很好地传递给它。的返回map
是一个数组,我们可能想要更好地格式化它,因此join
.
需要注意的是,与 with 一样Symbol#to_proc
,您不能将参数传递给辅助方法。
array.map!(&:to_s)
将原始数组修改为['one','two','three']
array.map(&:to_s)
返回数组['one','two','three']
。