これは私の配列です:
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
にします。
警告は、Symbol#to_proc
、引数をヘルパーメソッドに渡すことはできません。
array.map!(&:to_s)
は元の配列を_['one','two','three']
_に変更しますarray.map(&:to_s)
は、配列_['one','two','three']
_を返します。