This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-09-11
Channels
- # aleph (4)
- # beginners (68)
- # boot (21)
- # chestnut (1)
- # cljs-dev (72)
- # clojure (64)
- # clojure-austin (9)
- # clojure-dusseldorf (16)
- # clojure-gamedev (2)
- # clojure-italy (32)
- # clojure-russia (80)
- # clojure-spec (9)
- # clojure-uk (20)
- # clojurescript (105)
- # cursive (5)
- # data-science (5)
- # datomic (23)
- # defnpodcast (3)
- # emacs (22)
- # fulcro (2)
- # graphql (63)
- # hoplon (7)
- # lein-figwheel (17)
- # lumo (63)
- # mount (2)
- # nrepl (4)
- # off-topic (66)
- # om (6)
- # onyx (3)
- # portkey (54)
- # re-frame (12)
- # reagent (12)
- # specter (42)
- # uncomplicate (1)
- # unrepl (38)
- # vim (9)
- # yada (3)
@anjensan очень распостраненная
(ns any.namespace)
(def ::my-keyword)
(:require [any.namespace :as any-namespace)
(println ::any-namespace/my-keyword)
ну я понимаю что так можно сделать. но насколько часто это используется в реальных приложениях / библиотеках... можно конкретные примеры?
ах да, кстати, spec - хороший пример где активно используются namespaced keywords...
However what happens if two libraries modify the same map? On the same key? Then we are in trouble, because one overwrites the other.
https://kotka.de/blog/2010/05/Did_you_know_III.html это как?ну зачем их использовать в принципе ясно - кой где они требуются именно namespace-qualified (например для иерархий)... + как приватный-скрытый ключ в "чужих" мэпах
@anjensan очень часто используется в библиотеках и приложениях. Так же часто, как ссылки с одного сайта на другой.
Только полезнее думать про неймспейсы кивордов как о названии таблиц в базе данных, а не как о неймспейсе с кодом. Они, конечно, могут 1к1 быть, но это не цель
Ну представь себе мапы с неймспейсед кивордами, вместо рекордов/жава бинов - вот тебе и юзкейс
ии?... если у тебя два бина из рахных пакетов с одним набором пропертей - все пучком
Вроде бы датомы/триплеты в Datomic/DataScript :user/id, :user/name
@roman01la пасиба. запишем это в категорию "всякие data-query dsl либы" (не только sql)
Ещё в Rum "приватные" поля в стейте компонента
Например :rum/args
Для юзера он явный, когда нужно прочитать поле
я всегда думал что это синтаксический сахар для reader'а, который подставляет текущий неймспейс (из ns) в качестве неймспейса для кейворда... я ошибаюсь ?
Вроде всё так. Только тогда либо я плохо диалог про рум попарсил, либо "без явного неймспейса" не вяжется с :: для рум/аргс
ну для чего удобно использьвать :: - у тебя, допустим, есть мепа, которую создал кто-то другой. например это ring-request. и ты хочешь к ней добавить свое поле, но боишься коллизий... используешь ::field вместо :field и все пучком
при этом если сильно-сильно приспичит (при дебаге например), то все еще легко получить доступ к этому полю из другого неймспейса
а так, имхо не вижу разницы между ::rum/args и, например, :rum-args в данном ключе 😃
Ну рум - это пример либы, которая, чтоб ты не попутал свои клиентские поля со служебными полями либы - добавила свой неймспейс
Представь любой конфиг файл средего апликейшена - это, считай, свалка ки/велью, в которой ты можешь неймспейсы использовать вместо всяких подчеркиваний и прочего ада
ну если конфиги в стиле .properties - согласен. иначе это все равно древовидный объект
Везде, где сократить имя нельзя без костыля - хрен пойми какие сокращения используют, с которыми потом х## отдебыжишь кто что имел ввиду
Замени любой ринговский киворд на такой же, только с дефисом вместо слеша, и попробуй код почитать
я думал всегда что в ринге определены только кейворды без неймспейсов, https://github.com/ring-clojure/ring/blob/master/SPEC
Это ключи реквеста/респонса, думаю так слелали, что бы "удобненько", и чтобы быстрее сереализация была в строку. Это ж учасник перфоманс-сенситив кода
ну вот глянул мидлвар для сессии - там есть :session и :session/key... сильно сомневаюсь что :session-key было бы хуже 😃
устал тебе продавать нс киворды. Никогда не пользуйся, оно того не стоит. Обман, чтоб набрать классы (с)
Я вам про неймспейсы скажу такую штуку: мне очень нравились неймспейсы в XML (и это было единственное, что там нравилось): очень легко разные структуры данных обогащать метаданными и аспектами, как с точки зрения создания, так и с точки зрения чтения.
Вот, namespaced keywords играют такую штуку для структур данных Clojure, причём не только для сериализации, но и в райнтайме.
Ключевое свойство здесь - композируемость. Можно взять две карты и слить их в одну, и всё будет продолжать работать.
Вот, я когда-то это наваял, и неймспейсы были крайне в тему: http://doc.apsstandard.org/2.1/_downloads/package-format-specification-12.pdf