我正在寻找clojure关键字中允许的字符列表.具体来说,我有兴趣知道是否允许以下任何字符:- _ /.
我不是一个java程序员,所以我不知道其中的潜在影响.如果有这样的事情,我不知道clojure关键字是否映射到java关键字.
Rob*_*lan 16
编辑:
当我最初撰写这个答案时,我可能对"你能逃脱什么?"的问题投入太多了.尽管如此,关键字可容许性问题似乎仍未解决.所以:
首先,关于关键词,对于新读者:
:foo没有名称空间组件.表面上,限定关键字看起来像:foo/bar斜杠之前的部分是命名空间.关键字不能被引用,并且可以被赋予不存在的命名空间,因此它们的命名空间行为与其他Clojure对象不同.:foo可以通过keyword函数创建,也就是或.(keyword name-str)(keyword ns name)官方允许什么?
根据读者文档,允许使用单个斜杠,名称中没有句点,以及所有符号规则.
实际允许什么?
读者可能会或多或少地使用任何空格.例如,
user> :-_./asdfgse/aser/se
:-_./asdfgse/aser/se
Run Code Online (Sandbox Code Playgroud)
看似合法.上述关键字的命名空间是:
user> (namespace :-_./asdfgse/aser/se)
"-_./asdfgse/aser"
Run Code Online (Sandbox Code Playgroud)
因此,命名空间似乎包含上一个正斜杠之前的所有内容.
该keyword功能更加宽松:
user> (keyword "////+" "/////")
:////+//////
user> (namespace (keyword "////+" "/////"))
"////+"
Run Code Online (Sandbox Code Playgroud)
同样,如果你使用这个keyword功能,空格也很好.我不确定对Unicode字符有什么限制,但是当我输入任意字符时,REPL似乎没有抱怨.
未来可能会发生什么:
关于验证关键字的确实存在一些问题.据推测,最长的开放式clojure门票之一涉及关键字的验证.因此,关键字功能在将来可能会停止如此宽松,尽管这似乎在空中.查看assembla票证和谷歌小组讨论.
小智 6
从该列表中,读者当然允许 - 和 _,但 / 作为命名空间和符号名称之间的分隔符具有特殊含义。句号(您没有询问过)在符号名称中也是有问题的,因为它用在完全限定的 Java 类名称中。
就 Clojure 惯用语而言, - 是符号名称中最好的朋友。它取代了 Java 中的驼峰式大小写或 Ruby 中的下划线。
"正确"的答案是记载:
符号以非数字字符开头,可以包含字母数字字符和*,+,!, - ,_和?(最终将允许其他字符,但并非所有宏字符都已确定).'/'具有特殊含义,它可以在符号中间使用一次,以将命名空间与名称分开,例如my-namespace/foo.'/'本身命名除法函数.'' 具有特殊含义 - 它可以在符号中间使用一次或多次来指定完全限定的类名,例如java.util.BitSet,或命名空间名称.以'.'开头或结尾的符号 由Clojure保留.包含/或的符号.据说是"合格的".以':'开头或结尾的符号由Clojure保留.符号可以包含一个或多个非重复的':'.
编辑:进一步关于关键字:
关键字就像符号一样,除了:
*它们可以而且必须以冒号开头,例如:fred.
*他们不能包含'.' 或命名类.
*在当前命名空间中解析以两个冒号开头的关键字
从 1.3 开始,您可以'在任何不以关键字开头的地方使用。所以:arthur's-keyword现在是允许的:)
我偶尔使用关键字:-P并:-D为我的代码增添趣味(作为 true 和 false 的同义词)
| 归档时间: |
|
| 查看次数: |
5395 次 |
| 最近记录: |