Vla*_*nov 39 ruby arrays enumerable
这是我的阵列:
array = [:one,:two,:three]
Run Code Online (Sandbox Code Playgroud)
我想将to_s
方法应用于我的所有数组元素array = ['one','two','three']
.
我该怎么做(将可枚举的每个元素转换为其他元素)?
saw*_*awa 66
这将有效:
array.map!(&:to_s)
Run Code Online (Sandbox Code Playgroud)
mik*_*iku 17
您可以分别使用map
或者map!
第一个将返回一个新列表,第二个将就地修改列表:
>> array = [:one,:two,:three]
=> [:one, :two, :three]
>> array.map{ |x| x.to_s }
=> ["one", "two", "three"]
Run Code Online (Sandbox Code Playgroud)
cor*_*ard 16
值得注意的是,如果你有一个对象数组,你想单独传递给一个具有不同调用者的方法,如下所示:
# erb
<% strings = %w{ cat dog mouse rabbit } %>
<% strings.each do |string| %>
<%= t string %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
您可以使用method
与块扩展行为相结合的方法来简化:
<%= strings.map(&method(:t)).join(' ') %>
Run Code Online (Sandbox Code Playgroud)
如果您不熟悉,那么method
封装与在Proc中传递给它的符号相关联的方法并返回它.&符号将这个Proc扩展为一个块,它可以map
很好地传递给它.返回map
是一个数组,我们可能想要更好地格式化它,因此join
.
需要注意的是Symbol#to_proc
,您不能将参数传递给辅助方法.
array.map!(&:to_s)
将原始数组修改为 ['one','two','three']
array.map(&:to_s)
返回数组['one','two','three']
.