Я новичок в EDN и просматриваю спецификацию EDN - https://github.com/edn-format/edn
Для чего используются символы EDN, такие как «$ % &», и как их использовать при чтении EDN в Clojure?
Я новичок в EDN и просматриваю спецификацию EDN - https://github.com/edn-format/edn
Для чего используются символы EDN, такие как «$ % &», и как их использовать при чтении EDN в Clojure?
В спецификации упоминаются символы, но это не означает, что то, что говорят на клавиатуре, называется символами.
Это немного сбивает с толку, поэтому позвольте мне переформулировать его. Например, на клавиатуре кто-то может сказать, что есть символы, и это будут @
, #
, $
, %
, ^
, &
и другие. Давайте назовем эти символьные символы.
Теперь в 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}
$sym
,%sym
и&sym
— допустимые имена символов. - person Lee   schedule 30.11.2019