Что означает #queue в (def empty-queue #queue [])?

Читая исходный код re-frame, я наткнулся на эта строка:

(def empty-queue #queue [])

Что такое #queue? Какой эффект это имеет?


person kamituel    schedule 20.04.2017    source источник
comment
Я думаю, что это может быть тег для чтения, но не уверен, для чего он там? Никогда не использовал эти теги сам...   -  person kamituel    schedule 20.04.2017


Ответы (1)


#queue [] — это помеченный литерал: #queue использует член queue *data-readers* для преобразования или интерпретации [].

Конкретное определение этого средства чтения в src /main/clojure/cljs/tagged_literals.cljs в репозитории ClojureScript, на который ссылается *cljs-data-readers* определение ниже; он преобразует [] из вектора в cljs.core.PersistentQueue.

См. также документацию по адресу https://cljs.github.io/api/syntax/queue-literal


Постоянные структуры очередей как в Clojure, так и в ClojureScript существуют, чтобы обеспечить эффективную отправку на один конец и извлечение с другого — в отличие от списков и векторов, которые эффективны только при отправке и извлечении с одной и той же стороны.

person Charles Duffy    schedule 20.04.2017
comment
Зачем мне использовать такой помеченный литерал вместо того, чтобы просто использовать cljs.core.PersistentQueue.EMPTY напрямую? - person kamituel; 20.04.2017
comment
Краткость? Это очень синтаксический сахар. - person Charles Duffy; 20.04.2017
comment
Я понимаю. Спасибо, это объясняет! - person kamituel; 20.04.2017
comment
@CharlesDuffy Это также имеет смысл для чего-то вроде EDN или cljc, где язык, отличный от cljs, может иметь структуру очереди, но, конечно, не иметь cljs.core.PersistentQueue. Проект clj-jvm может определить тег читателя для #queue, который использует clojure.core.PersistentQueue. - person amalloy; 20.04.2017
comment
@amalloy Так что это также можно считать синтаксическим сахаром, поскольку я все еще мог бы сделать #?(:clj ... :cljs ...), чтобы получить желаемый тип очереди как в .clj, так и в .cljs. Однако вариант использования EDN более интересен. - person kamituel; 21.04.2017