これは私の配列です:
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 にカプセル化し、それを返します。map
アンパサンドは、この Proc をブロックに展開し、非常にうまく渡されます。の戻り値map
は配列であり、おそらくもう少し適切にフォーマットする必要があるため、join
.
注意点は、 と同様にSymbol#to_proc
、ヘルパー メソッドに引数を渡すことができないことです。
array.map!(&:to_s)
元の配列を次のように変更します['one','two','three']
array.map(&:to_s)
配列を返します['one','two','three']
。