簡體   English   中英

將清單用作Clojure功能主體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM