0

重複の可能性:
Ruby / RubyonRailsアンパサンドコロンショートカット

習慣として、私は他の誰かのソースコードを定期的に読んで、要点にコメントするようにしています。今、私はsinatraのベースアプリを読んでいて、興味深いコードに出くわしました(これは彼らのRequestクラスの一部です)

def accept
  @env['sinatra.accept'] ||= begin 
    entries = @env['HTTP_ACCEPT'].to_s.split(',') 
    entries.map { |e| accept_entry(e) }.sort_by(&:last).map(&:first)
  end
end

私が得られない部分は、&:lastと&:firstが何をしているのか?!?狂気のようです!

4

1 に答える 1

1

の意味と使用法については、重複する質問の回答をお読みください&:...。この場合、entriesは配列であり、3つのメソッドmap、、、sort_byおよびmapチェーンがあります。sort_by(&:last)と同等sort_by{|x| x.last}です。map(&:first)と同じmap{|x| x.first}です。最初のmapものが使用しない理由&:...は、(i)の受信者がでaccept_entryはなくe、(ii)引数を取るためeです。

于 2011-06-09T07:08:41.367 に答える