我遇到了一種方法,其中程序提取了對象的name
屬性,並發現語法有點奇怪。這是處理JSON響應的結果。Ruby或Rails數組迭代語法
我們的JSON響應將是以下=
[{"id"=>9, "name"=>"Baked Potato w/ Cheese", "instructions"=>nil},
{"id"=>12, "name"=>"Baked Brussel Sprouts", "instructions"=>nil}]
results = JSON.parse(response.body)
def extract_name
->(object) { object["name"] }
end
results.map(&extract_name)
所以我很理解results.map(&extract_name)
返回JSON對象的name
,我只是不明白怎麼樣。
我不熟悉->(object) { object["name"] }
語法。是否還有其他簡寫方法可以幫助我更好地理解這種類型的語法?
@ sschmeck的回答是不錯的,但值得注意的是,這不是偉大的代碼。每次調用'extract_name'時,此代碼都會初始化一個新的lambda。將lambda分配給一個變量或常數比較好,例如, 'EXTRACT_NAME = - >(object){object [「name」]}; results.map(&EXTRACT_NAME)'。 –
@Jordan:你確定嗎?我非常肯定'e.map(&m)'會被解析爲'e.map(&(m()))'所以'm'只會被調用一次,然後'&'會被應用到它的僅返回一次值。 –
是的,你是正確的,但我寫的是「這個代碼每次調用'extract_name'時都會初始化一個新的lambda。」每次迭代都不會調用它,但每次調用「results.map(&extract_name)」時都會調用它。 –