Каково использование таких символов, как «$ % &» в EDN?

Я новичок в EDN и просматриваю спецификацию EDN - https://github.com/edn-format/edn

Для чего используются символы EDN, такие как «$ % &», и как их использовать при чтении EDN в Clojure?


person ppp456878    schedule 30.11.2019    source источник
comment
Единственное место, где эти символы появляются в спецификации, - это сказать, что они являются допустимыми символами в символе, например. $sym, %sym и &sym — допустимые имена символов.   -  person Lee    schedule 30.11.2019
comment
Каково использование символов? Я понимаю ключевые слова, но не уверен в важности символов?   -  person ppp456878    schedule 30.11.2019
comment
Символы обычно используются для идентификаторов, но это просто еще один тип данных, поэтому вы можете использовать их для чего угодно. Они похожи на ключевые слова в том, что могут иметь пространство имен.   -  person Lee    schedule 30.11.2019


Ответы (1)


В спецификации упоминаются символы, но это не означает, что то, что говорят на клавиатуре, называется символами.

Это немного сбивает с толку, поэтому позвольте мне переформулировать его. Например, на клавиатуре кто-то может сказать, что есть символы, и это будут @, #, $, %, ^, & и другие. Давайте назовем эти символьные символы.

Теперь в 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}
person Didier A.    schedule 30.11.2019
comment
Спасибо за хорошее подробное объяснение :) - person ppp456878; 01.12.2019