Bob*_*har 2 clojure compojure-api
我正在尝试学习Clojure,并且在文字函数语法方面受阻.我无法弄清楚文字函数的等价物(defn fourteen [] 14)是什么.
(def fourteen (fn [] 14))
;; => #'user/fourteen
(fourteen)
;; => 14
(defn defn-fourteen [] 14)
;; => #'user/defn-fourteen
(defn-fourteen)
;; => 14
(def literal-14 #(14))
;; => #'user/literal-14
(literal-14)
;; ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn user/literal-14 (form-init2956929406616221071.clj:1)
Run Code Online (Sandbox Code Playgroud)
我不认为这是一个重复的匿名函数在clojure中期望多少个参数?,但也许它是,我只是没有经验来认识到这一点.
我如何或者可以使用def literal-14来允许(literal-14)调用工作?
正如A.韦伯指出的那样,constantly写这个是最常用的方式:
(def fourteen (constantly 14))
Run Code Online (Sandbox Code Playgroud)
匿名函数文字的问题在于它总是扩展为一个函数,其主体是一个列表:
'#(stuff and things) ;=> (fn* [] (stuff and things))
Run Code Online (Sandbox Code Playgroud)
所以这就是你尝试中发生的事情:
'#(14) ;=> (fn* [] (14))
Run Code Online (Sandbox Code Playgroud)
没有办法摆脱这些括号.您可以使用do或identity类似的方式破解它们,但最重要的是,如果您需要编写一个匿名函数,其主体不适合作为列表编写,则不应使用文字语法.
14不是一个函数,但door->会在紧要关头起作用:
#(do 14)
#(-> 14)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
392 次 |
| 最近记录: |