[英]Use list as Clojure function body
假設在Clojure中,我有一個這樣定義的列表:
(def function-body '(+ a b))
接下來,我想將function-body
列表用作function-body
的有效主體,因此我想執行以下操作:
(defn my-sum [a b] function-body)
生產:
(defn my-sum [a b] (+ a b))
這是有效的Clojure代碼。
Clojure有可能嗎? 如果我應該恢復為宏,應該使用哪種擴展?
我懷疑您是否需要將函數主體保留為一種形式。 函數本身(fn [ab] (+ ab))
在您的示例中為(fn [ab] (+ ab))
可以作為事物傳遞,可以作為參數傳遞,可以用作數據結構中的元素,還可以執行調用參數的功能。
根據情況,您的目的可能是要提供幾個可以調用的功能。 將它們作為功能而不是形式。
您可能要為此使用宏。 您所擁有的代碼只會返回列表'(+ ab)
,而不做任何加法運算。
另一方面,您實際上想解決什么問題? 我真的不明白為什么你會想做這樣的事情。 您可能會問錯問題。
(def function-body '(+ a b))
(eval `(defn ~'my-sum ~'[a b] ~function-body))
快速說明:
; what we eval above is this:
`(defn ~'my-sum ~'[a b] ~function-body)
; which becomes this:
; (clojure.core/defn my-sum [a b] (+ a b))
(my-sum 2 3) ; => 5
宏將非常相似,即僅取消引用主體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.