我有時會發現在Clojure中定義簡化的函數版本,並返回部分函數(例如,定義減少的部分函數
(defn prefix
([pre string]
(str pre ":" string))
([pre]
(fn [string]
(prefix pre string))))
這意味着,你可以做兩種:
(prefix "foo" 78979)
=> "foo:78979"
((prefix "foo") 78979)
=> "foo:78979"
這似乎相當哈斯克爾十歲上下,並避免了需要partial
創造的部分功能。
但在Lisp中它被認爲是良好的編碼風格/ API設計嗎?
這是咖啡,是嗎?看起來很有用。我認爲這裏的界面可以改進。如果你能使這種技術具有通用性,那將是很好的;也就是說,對於具有所有關鍵字的函數,如果您使用一組不完整的關鍵字調用該函數,它將返回一個閉包,該閉包接受所有剩餘的關鍵字。如果所有關鍵字都被使用了,那麼你得到了這個函數的值。我可以看到這被用作優化技術。 –
我認爲它仍然是一個意識形態,如果你給它定義可讀性的偏見,當你這樣定義它們時:(def prefix(partial ...))所以這裏有兩個參數:一個引用的名字,它是顯式的。請注意,您現在不使用defn,但是def-partial正在爲您創建函數 – KIMA