Ruby で map(&:name) はどういう意味ですか? 質問する

Ruby で map(&:name) はどういう意味ですか? 質問する

このコードを見つけたのはRailsCast について:

def tag_names
  @tag_names || tags.map(&:name).join(' ')
end

(&:name)in はどういうmap(&:name)意味ですか?

ベストアンサー1

これは略語ですtags.map(&:name.to_proc).join(' ')

fooがメソッドを持つオブジェクトである場合to_proc、それを としてメソッドに渡すことができ&foo、そのメソッドは を呼び出しfoo.to_procてそれをメソッドのブロックとして使用します。

このSymbol#to_procメソッドは元々 ActiveSupport によって追加されましたが、Ruby 1.8.7 に統合されました。実装は次のとおりです。

class Symbol
  def to_proc
    Proc.new do |obj, *args|
      obj.send self, *args
    end
  end
end

おすすめ記事