gpt4 book ai didi

clojure - Clojure 中的 pound-quote (hash-quote, #') 是否运行解析和符号函数?

转载 作者:行者123 更新时间:2023-12-02 14:14:04 26 4
gpt4 key购买 nike

也许你可以帮我在文档中找到它。我使用磅引号能够在执行之前传递未评估的函数名称。例如:

(#'cons 1 ())
;(1)

(defn funcrunner [func a b]
(func a b))

(funcrunner cons 'a ())
;(a)

(funcrunner 'cons 'a ())
'()

(funcrunner #'cons 'a ())
;(a)

#'cons
;#'clojure.core/cons

(resolve (symbol 'cons))
;#'clojure.core/cons

我的猜测是这是一个读取器宏。

我的问题是 (a) 英镑报价 (#') 的简写是什么? (b) 你能解释一下它在做什么吗? (c) 你能在文档中找到它吗? (d) 它实际上是解析函数和符号函数的简写吗?

PS - 对于不在美国的用户 - # 也称为“哈希”或“交叉哈希”。

PPS - 我知道我的示例使得此需求有些多余。我很想知道这是否完全多余或者有特定的用例。

最佳答案

#' 是一个扩展为 (var foo) 的读取器宏。您在这里所做的不是传递未评估的函数,而是传递包含函数的变量。这样做的原因是因为 var 是查找其包含的值并调用它的函数:

user=> (defn foo [x] (+ x 10))
#'user/foo
user=> (#'foo 10)
20
user=> ((var foo) 10)
20

请注意,当我定义该函数时,返回了一个 var。看起来就像你一直在做的事情! :)

关于clojure - Clojure 中的 pound-quote (hash-quote, #') 是否运行解析和符号函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10945187/

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