2017-04-15 46 views
1
def reverse_words(s) 
    s.split.map(&:reverse).join(' ') 
end 

這段代碼反轉了句子中的每個單詞。但我不明白在代碼中的「&:」。有人可以向我解釋嗎?Ruby代碼什麼是「&:」在這裏做的

+1

*絕對*不是Python。那是Ruby。 – Makoto

+0

看看這個問題http://stackoverflow.com/questions/1217088/what-does-mapname-mean-in-ruby – sdc

+0

SymbolHound是你的朋友,很難Google這樣的事情:http://symbolhound.com/? q = ruby​​ +%26%3A –

回答

0

&表示reverse引用的是函數,而不是塊。

該方法假定調用者將傳遞一個String對象。

  1. 首先方法#split S上的上空格到一個數組(如果字符串沒有空格它創建以字符串作爲唯一的元件的陣列)
  2. 調用新陣列上的Array#map方法並將其傳遞給String#reverse方法。

&告訴地圖方法,該輸入是一方法的引用,而不是一個標準塊

+0

這與方法參考無關。一個方法引用就像'each(&method(:puts))'。另外,這與'map'無關。 'map'不知道你是直接傳遞一個塊還是通過一元前綴和符號運算符。 –

1

map期望的代碼塊有一個參數。你通常會做的是對這樣的說法叫反向:

map {|elt| elt.reverse } 

隨着&語法可以縮短這

map(&:reverse) 

結腸是有制定一個符號出了名reverse的。