我不禁注意到,筆者更喜歡叫
(first options)
多次超過緩存結果:關於defmulti的來源問題[docstring (if (string? (first options)) (first options) nil) options (if (string? (first options)) (next options) options) m (if (map? (first options)) (first options) {}) options (if (map? (first options)) (next options) options) ...]
我認爲這是確定(以性能條款),因爲它定義了一個將在編譯期間執行的宏?
我還不確定是否理解調用宏的評估過程。以
(defmulti ...)
爲例,糾正我,如果我錯了:在編譯過程中,宏是擴展,其中結果是調用特殊的let
窗體,這反過來又翻譯成字節碼。那又怎麼樣?假裝我們定義一個FN,而不是一個宏觀的,是值得引入一個額外的符號緩存的
(first options)
結果:[f (first options) docstring (if (string? f) f nil) options (if (string? f) (next options) options) f (first options) m (if (map? f) f {}) options (if (map? f) (next options) options) ...]
究竟意味着什麼,一個變種
hasRoot
?什麼是Unbound
?