在 EDN 中,'$ % &' 等符号的用途是什么?
What are the uses of symbols like '$ % &' in EDN?
我是 EDN 新手,正在阅读 EDN 规范 - https://github.com/edn-format/edn
EDN 符号(如“$ % &”)的用途是什么?在 Clojure 中阅读 EDN 时如何使用它们?
规范中提到了符号,但它们的意思并不像在键盘上说的那样被称为符号。
有点乱,我重新整理一下。例如,在键盘上,有人可能会说有符号,这些符号是 @
、#
、$
、%
、^
、&
,等等。让我们调用这些字符符号。
现在在 EDN 中,您有 Symbols,但它不是指代字符符号。它指的是一种数据类型。更令人困惑的是,它提到EDN Symbol可以包含一组特定的字符符号,但它不是字符符号。
那么什么是 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 Symbols、Strings 和 Keywords 都只是一组字符,取决于它是 Symbol、String 还是 Keyword,允许的字符不同,例如,这就是为什么 EDN 规范说 Symbol 可以包含某些$
和 ?
等字符。但它并没有提到所有字符,例如:^
不允许出现在 Symbol 中,但它出现在 String 中:
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}
我是 EDN 新手,正在阅读 EDN 规范 - https://github.com/edn-format/edn
EDN 符号(如“$ % &”)的用途是什么?在 Clojure 中阅读 EDN 时如何使用它们?
规范中提到了符号,但它们的意思并不像在键盘上说的那样被称为符号。
有点乱,我重新整理一下。例如,在键盘上,有人可能会说有符号,这些符号是 @
、#
、$
、%
、^
、&
,等等。让我们调用这些字符符号。
现在在 EDN 中,您有 Symbols,但它不是指代字符符号。它指的是一种数据类型。更令人困惑的是,它提到EDN Symbol可以包含一组特定的字符符号,但它不是字符符号。
那么什么是 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 Symbols、Strings 和 Keywords 都只是一组字符,取决于它是 Symbol、String 还是 Keyword,允许的字符不同,例如,这就是为什么 EDN 规范说 Symbol 可以包含某些$
和 ?
等字符。但它并没有提到所有字符,例如:^
不允许出现在 Symbol 中,但它出现在 String 中:
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}