如果有像這樣的語句a.map{|x| x.foo}
,我可以省略x
變量,像這樣map(&:foo)
。這種類型的縮寫`map {| x | x.foo}` - >`map(&:foo)`
我想知道是否有這種行爲的名稱。 沒有名字,我無法尋找其他語言的類似行爲。
有人知道嗎?
如果有像這樣的語句a.map{|x| x.foo}
,我可以省略x
變量,像這樣map(&:foo)
。這種類型的縮寫`map {| x | x.foo}` - >`map(&:foo)`
我想知道是否有這種行爲的名稱。 沒有名字,我無法尋找其他語言的類似行爲。
有人知道嗎?
它通常被稱爲「符號處理」。它最初是Rails中的一個黑客攻擊,然後在Ruby中進行了合併和優化。
您不會在其他語言中找到類似的東西,除非它們還實現了Ruby的符號類型。符號與常量不同,但如果您想象一個指向函數的常量,也許是其他語言中的閉包,那麼您將接近它的行爲。
「What does map(&:name) mean in Ruby?」是一個很好的討論,以及它如何實現的一個例子。還請查看該頁面右側的相關帖子。
我剛剛發佈該鏈接。我喜歡紅寶石語法糖,但它肯定會在某個時候令人困惑。優秀答案 – engineersmnky
如果您發現令人困惑的等待,直到您基於數據庫中的字段名稱或多線程應用程序來調試動態創建的方法。 –
這似乎是特定於Ruby的語法。在C#中,未縮寫的語法稱爲Lambda表達式,但無法縮寫它,而Lambda是Ruby中的其他內容。 –
這是一種強制類型。在這種情況下,它會嘗試通過調用'to_proc'將給定的對象轉換爲proc。 –