我对EDN很陌生,并通过了EDN规范- https://github.com/edn-format/edn。
像“$%&”这样的EDN符号的用途是什么?我如何使用它们来阅读Clojure中的EDN?
发布于 2019-11-30 21:09:09
规范提到了符号,但它们并不是指键盘上所说的符号。
这有点让人困惑,所以让我重新整理一下。例如,在键盘上,有人可能会说有符号,其中包括@、#、$、%、^、&等。让我们称之为这些字符符号。
在EDN中,你有符号,但它不是指字符符号。它指的是数据类型.更令人困惑的是,它提到EDN符号可以包含一组特定的字符符号,但它不是字符符号。
那么EDN符号是什么呢?以下是一些:
hello
abc
+
person/name
this$is#insane其中每一个都是有效的EDN符号。这有助于对比他们,以理解他们。下面是一串EDN字符串:
"hello"
"abc"
"+"
"person/name"
"this$is#insane"以下是一系列EDN关键词:
:hello
:abc
:+
:person/name
:this$is#insane那么,这些有什么区别呢?你看,EDN符号、字符串和关键字都只是一组字符,取决于它是符号、字符串还是关键字,允许的字符不同,例如,这就是为什么EDN规范说符号可以包含某些字符,比如$和?。但是它没有提到所有字符,例如:符号中不允许^,但是它在字符串中:
hello^john ; Not a valid EDN symbol
"hello^john" ; A valid EDN string此外,您还可以看到,EDN字符串必须在打开和结束的双引号""之间包含一组字符。另一方面,关键字必须具有以冒号:开头的字符集。符号不需要任何标记,任何连续的有效字符集都是符号,只要它们不以:开头或用双引号括起来。
现在要理解的第二件事是..。它们是干什么用的?这更模糊。当您将数据建模为EDN时,它们可以用于任何您想要使用的东西。您可以使用EDN字符串,也可以使用EDN关键字,反之亦然。无论何时,只要有一组只包含允许的符号字符的字符,就可以选择使用符号在EDN中表示这些字符。
通常,人们使用关键字来表示地图的键或标记,例如说动物的类型是:monkey。
{:animal-type :monkey}通常,字符串用于表示自由形式的文本.用户输入的文本,或需要显示给用户的文本。
{:animal-type :monkey
:animal-name "Bruno the monkey"}最后,符号通常用于指语言本身内的其他对象。例如引用一个函数,另一个数据,等等。
{:animal-type :monkey
:animal-name "Bruno the monkey"
:transform-fn animal/add-owner-info}https://stackoverflow.com/questions/59119700
复制相似问题