gpt4 book ai didi

clojure - 如何制作不带参数并返回常量值的文字函数?

转载 作者:行者123 更新时间:2023-12-01 13:12:42 26 4
gpt4 key购买 nike

我正在尝试学习 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)

我不认为这是 How many arguments does an anonymous function expect in clojure? 的重复,但也许是这样,我只是不具备认识到这一点的经验。

我如何或可以定义literal-14 以允许 (literal-14)调用工作?

最佳答案

A. Webb pointed out , constantly是最地道的写法:

(def fourteen (constantly 14))

匿名函数字面量的问题在于它总是扩展为一个函数体是一个列表:
'#(stuff and things) ;=> (fn* [] (stuff and things))

所以这是您尝试中发生的事情:
'#(14) ;=> (fn* [] (14))

没有办法摆脱这些括号。您可以使用 do 绕过它们。或 identity或类似的东西,但最重要的是,如果您需要编写一个匿名函数,其主体不适合作为列表编写,则不应使用文字语法。

关于clojure - 如何制作不带参数并返回常量值的文字函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35737118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com