Voici mon tableau:
array = [:one,:two,:three]
Je souhaite postuler to_s
méthode à tous mes éléments de tableau pour obtenir array = ['one','two','three']
.
Comment puis-je faire cela (convertir chaque élément de l'énumérable en quelque chose d'autre)?
Cela fonctionnera:
array.map!(&:to_s)
Il convient de noter que si vous disposez d'un tableau d'objets, vous souhaitez passer individuellement dans une méthode avec un appelant différent, comme ceci:
# erb
<% strings = %w{ cat dog mouse rabbit } %>
<% strings.each do |string| %>
<%= t string %>
<% end %>
Vous pouvez utiliser la méthode method
associée au comportement d'expansion des blocs pour simplifier:
<%= strings.map(&method(:t)).join(' ') %>
Si vous n'êtes pas familier, ce que method
fait est encapsule la méthode associée au symbole qui lui est passé dans un Proc et le renvoie. L'esperluette étend ce Proc en un bloc, qui est très bien passé à map
. Le retour de map
est un tableau, et nous voulons probablement le formater un peu mieux, d'où le join
.
La mise en garde est que, comme avec Symbol#to_proc
, vous ne pouvez pas passer d'arguments à la méthode d'assistance.
array.map!(&:to_s)
modifie le tableau d'origine en ['one','two','three']
array.map(&:to_s)
renvoie le tableau ['one','two','three']
.