1. ホーム
  2. ruby

[解決済み] Rubyのmap(&:name)ってどういう意味?

2022-03-18 17:41:13

質問

このコードは RailsCast :

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

は何を意味しているのでしょうか? (&:name)map(&:name) というのは?

どのように解決するのですか?

の略語です。 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