对于我正在实现的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)
Run Code Online (Sandbox Code Playgroud)
在Clojure的读者对待斜杠以特殊的方式:
'/'具有特殊含义,它可以在符号中间使用一次,以将命名空间与名称分开,例如my-namespace/foo.'/'本身命名除法函数.
因此,您将无法在函数名称中包含斜杠,因为读者会将其解释为命名空间的名称.
不明显的部分是当你输入:
(defn =/ ...)
Run Code Online (Sandbox Code Playgroud)
=/读者将符号扩展为完全命名空间限定名称:
my.org.namespace/=/
Run Code Online (Sandbox Code Playgroud)
这违反了"每个名字的一个斜线"规则.
| 归档时间: |
|
| 查看次数: |
267 次 |
| 最近记录: |