有人可以給出一些關於何時使用Scheme或球拍宏的通用指南以及何時使用函數。在計劃或球拍何時使用功能和什麼時候使用宏
如果你沒有創建新的語法,並且你沒有在變量上創建副作用,那麼你會不得不(或者更合適)使用宏而不是函數?
有人可以給出一些關於何時使用Scheme或球拍宏的通用指南以及何時使用函數。在計劃或球拍何時使用功能和什麼時候使用宏
如果你沒有創建新的語法,並且你沒有在變量上創建副作用,那麼你會不得不(或者更合適)使用宏而不是函數?
宏允許您使用完全不同的語法。雖然最簡單的宏常常可以執行,但宏調用不必看起來像函數調用。另外,宏在運行時間之前的獨立階段執行。所以,如果你需要不同的語法,或者如果你想在運行時進行宏擴展,那麼就使用一個宏。
一般來說,我會說,如果你可以用一個函數乾淨地做到這一點,然後使用一個函數。
Matthias Felleisen在他的Racket style guide有一個簡短的討論這個問題。
謝謝薩姆。我注意到了他的簡短評論,但我也注意到在他的風格指南結束時的待辦事項列表中,他要求某人爲該指南撰寫關於該問題的整段內容,所以我認爲這是一個比這些簡短評論他的。 – 2012-03-19 19:22:50
感謝丹非常明確的解釋。但是我真正想知道的是,如果你沒有創建新的語法,並且你沒有在變量上創建副作用(例如通過引用模擬調用等),那麼宏是否可以完成函數不能或做的更好? – 2012-03-17 21:39:15
另一種看待它的方法:宏讓你決定在編譯時和運行時應該進行什麼類型的計算。編譯時計算通常處理語法問題。但是一些程序關鍵取決於編譯時計算,比如類型化球拍等類型化語言的類型檢查階段。大多數程序員不需要進行重要的編譯時計算,所以堅持使用普通的香草函數,除非你真的需要在編譯時表達計算。 – dyoo 2012-03-18 22:30:50