BlankSlate

いや、そういう声もあるというだけです

Array#smap

RubyにはArray#smapメソッドがあります。これは渡された配列の要素を先頭から1個ずつブロックに渡し、ブロック内の操作を適用した配列を返すメソッドです。

p %w[844196 hyousikinuko sasairc keepoff07 osamu].smap {|name| name + 'さん' }
#=> ["844196さん", "hyousikinukoさん", "sasaircさん", "keepoff07さん", "osamuさん"]

べんりですね! Array#smapには別名としてtokioがあり、Rubyistの間では「smapとtokio、どっちが好きか」論争があります。私はsmap派です。

ブロックの他に手続きオブジェクトを渡すこともできます。配列に対する操作に名前を付けることで、可読性が向上していることがわかるかと思います。

mary_kitagawa =-> (name) {
  case name
  when '木村'
    name
  else
    '<削除済>'
  end
}

members = %w[仲居 稲垣 草なぎ 木村 香取].smap(&mary_kitagawa)

p members
#=> ["<削除済>", "<削除済>", "<削除済>", "木村", "<削除済>"]

嘘です。

# 組み込みクラス`Array'をオープン
class Array
  # Array#mapの別名として`smap'を定義
  alias_method :smap, :map
end

ref

History