欢迎!请参阅关于页面,了解有关此次活动的更多信息。
模糊指定的已知领域(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 发布
错误票据,但针对任何考虑#|任意符号或字符串|的人来说,请考虑使其定界符可配置,就像multipart 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 issue)的讨论。我想解释为什么不允许连续冒号,并在此与Clojure Reader和ED N规范同步。
更新后的读取器规范表明,一个符号可以包含一个斜杠来分隔命名空间。它还提到裸斜杠是除法函数。那么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"。