2011-06-09 46 views
0

可能重複:
Ruby/Ruby on Rails ampersand colon shortcut爲什麼會在紅寶石的屬性上使用一元運算符?即:第一

成爲習慣我嘗試經常閱讀一點點別人的源代碼,並在一個要點對此發表評論。現在,我通過Sinatra的基礎應用程式閱讀書籍並在代碼的一個有趣的位來(這是他們請求類的一部分)

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 

我不明白的部分是什麼&:最後和&:先做?!?這看起來很瘋狂!

+0

更接近http://stackoverflow.com/questions/1217088/what-does-mapname-mean-in-ruby – Simon 2011-06-09 07:00:12

回答

1

閱讀關於&:...的含義和用法的重複問題的答案。在這種情況下,entries是一個數組,並且鏈接有三種方法map,sort_bymapsort_by(&:last)相當於sort_by{|x| x.last}map(&:first)map{|x| x.first}相同。第一個map不使用&:...的原因是(i)accept_entry的接收方不是e,並且(ii)它需要參數e