欢迎!请参阅关于页面了解有关如何工作的更多信息。
具体的不足区域(https://clojure.org/reader#The Reader--Reader forms)
参考资料
评论人:jafingerhut
Clojure读取器文档也没有提到以下符号作为有效组成字符。它们在本站点的EDN readme中都被列为有效的符号组成字符:https://github.com/edn-format/edn#symbols
美元符号 - 在Clojure/JVM中用于区分Java子类名称和类名称,例如 java.util.Map$Entry百分号 - 不确定为什么这是edn规范的一部分。在Clojure中,似乎只用于#()内,例如 % %1 %&这样的参数与号 - 类似于在宏定义中的 &form 和 &env等于 - clojure.core/= 等多个函数小于 - clojure.core/< clojure.core/<=大于 - clojure.core/> clojure.core/>=
我不知道Clojure和edn规范在这方面是否应该相同,但我觉得这一点值得在此票证中提及。
Alex,Rich在2011年针对CLJ-17评论道:“出于性能原因,运行时验证是不可行的。Cemerick的建议认为任意符号的支持使得它们有效是合理的,但任意符号的支持是另一个问题/想法。” 我不清楚有任何票据建议增强Clojure以支持任意符号,例如通过以下语法
`
您认为为支持符号和关键字中的任意字符创建增强型票据合理吗?
评论人:alexmiller
当然。这只是一个关于功能表达式的题外话,并已经为这种潜在用途保留了#|符号。但是,这有很多棘手的问题,我不认为这会很快发生 - 更可能是为了某些其他原因而被迫执行。
评论人:bendlas
这不是正确的票据,但任何想着#|任意符号(或字符串)|的人,请考虑使其分隔符可配置,就像mime多部分一样。
我已经创建了设计页面。我相信这个列表并没有包含你发现的所有复杂问题。如果你愿意分享笔记,我将很高兴尝试记录它们。
http://dev.clojure.org/pages/viewpage.action?pageId=11862058
Herwig,你可以编辑我前一个评论中链接的设计页面,添加一个关于MIME多部分如何允许配置分隔符,以及为什么固定分隔符可能是一个糟糕主意的参考或示例吗?
我在设计页面发表了评论。
删除了在阅读器页面已澄清并不再是问题的几个问题。
评论者:bronsa
与CLJ-1530相关
评论者:adamfrey
相关内容:Clojure 读取器不会接受包含连续冒号的符号和关键字(参见(链接:https://github.com/clojure/clojure/commit/005ea1b5f96c5bb762e155032a865e29ad71bcf3#diff-3a5dca122734225f3f60263876401aebR275 文本:LispReader.java)),尽管当前的 EDN 规范允许这样做。以下是有关连续冒号的(链接:https://github.com/edn-format/edn/issues/68 文本:GitHub 问题)。我想阐述为什么连续冒号不被允许,并在这一点上将 Clojure 读取器和 EDN 规范统一。
更新后的读取器规范表示,符号可以包含单个 / 以分隔命名空间。它还提到裸 / 是除法函数。那么关于 clojure.core// 呢?这仍然是一个可读的符号,对吧?这是不是“单个 /”规则的例外情况?foo.bar// 也会被读取吗?foo//bar 呢?
评论者:favila
另一种模棱两可的来源是我看到,不清楚关键字的第一位冒号是关键字(因此也是符号)的第一个字符,还是有特殊含义,并且规范实际上描述了从第二个字符开始发生了什么。这很重要,因为关键字规范(在 edn 和读者规范中)是以与符号的差别来给出的。我认为许多奇特的边缘情况(包括 :1 和 :a/1 的合法性)都源于这种模糊性,不同的票据/补丁似乎选择了一种或另一种基本假设。参见(链接:http://dev.clojure.org/jira/browse/CLJS-677?focusedCommentId=35025&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-35025 文本:此评论)以获取更多示例。
可能我们可以使用带有关键字和符号的标记字面值来创建或打印当它们不可读时的这些形式,以简化其字面值形式的读取器规范。例如,而不是产生复杂的解析规则以确保 clojure.core// 或 :1 是合法的,只要简单化字面值形式,并在用户遇到这些边缘情况时让他们写类似 #sym("clojure.core" "/") 或 #kyw "1" 东西(并让打印器打印这些)。
我认为 : 和 :: 是语法标记,规范描述了其后的字符。但我同意,这一点应该更加明确。LispReader 中的(错误的)正则表达式也没有帮助。
标记文本想法是| |语法的有趣替代方案,该语法已留待将来可能支持关键词和符号中的无效字符。但我想这个想法超出了这个工单的范围,这个工单实际上是关于明确规范的。
评论由:kunstmusik 制作
来晚了,我在
https://groups.google.com/forum/#!topic/clojure/CwZHu1Eszbk
中提到,1.目前可以作为符号名称的一部分,如下所示:
(let (link: a# 4 b#a 3) (println a1. b#a))
将打印 "4 3"。