gpt4 book ai didi

clojure - 允许 Clojure 函数名称中存在尾部斜杠

转载 作者:行者123 更新时间:2023-12-02 16:57:01 24 4
gpt4 key购买 nike

对于我正在实现的 DSL,我想创建一个 =/ 函数(类似于 not=)。
是否可以告诉读者允许我这样做?

我的猜测是“不。你在做梦。”,但谁知道......

user=> =/
RuntimeException Invalid token: =/ clojure.lang.Util.runtimeException (Util.java:221)

user=> (def =/ 1)
RuntimeException Invalid token: =/ clojure.lang.Util.runtimeException (Util.java:221)
1
RuntimeException Unmatched delimiter: ) clojure.lang.Util.runtimeException (Util.java:221)

user=> (defn =/ [x y] (not= x y))
RuntimeException Invalid token: =/ clojure.lang.Util.runtimeException (Util.java:221)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: y in this context, compiling:(NO_SOURCE_PATH:0:0)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: y in this context, compiling:(NO_SOURCE_PATH:16:16)
RuntimeException Unmatched delimiter: ) clojure.lang.Util.runtimeException (Util.java:221)

最佳答案

Clojure Reader以特殊方式处理斜杠:

'/' has special meaning, it can be used once in the middle of a symbol to separate the namespace from the name, e.g. my-namespace/foo. '/' by itself names the division function.

因此,您将无法在函数名称中包含斜杠,因为读者会将其解释为 namespace 的指定。

不明显的部分是当您键入:

(defn =/ ...)

符号 =/ 被阅读器扩展为其完全命名空间限定名称:

 my.org.namespace/=/

这违反了“每个名称一个斜杠”规则。

关于clojure - 允许 Clojure 函数名称中存在尾部斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34799724/

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