@anjensan очень распостраненная
(ns any.namespace)
(def ::my-keyword)
(:require [any.namespace :as any-namespace)
(println ::any-namespace/my-keyword)
ну я понимаю что так можно сделать. но насколько часто это используется в реальных приложениях / библиотеках... можно конкретные примеры?
First argument to def must be a Symbol
думаю, там подразумевалось (println ::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 (например для иерархий)... + как приватный-скрытый ключ в "чужих" мэпах
Еще для event-ов в reframe, да, можо придумать ситуаций
@anjensan очень часто используется в библиотеках и приложениях. Так же часто, как ссылки с одного сайта на другой.
@misha реквестирую конкретные примеры 😃
Только полезнее думать про неймспейсы кивордов как о названии таблиц в базе данных, а не как о неймспейсе с кодом. Они, конечно, могут 1к1 быть, но это не цель
аага. т.е. ююзаются в некоторых DSLях, например в spec, и во всяких sql-либах ?
Ну представь себе мапы с неймспейсед кивордами, вместо рекордов/жава бинов - вот тебе и юзкейс
Дсл тут как-то ортогонально, мне кажется
а где, позвольте узнать, в джава бинах неймспейсы ? 🙂
package откуда ты их импортируешь, лол
так, для справки, в джавабинах названия пропертей не имеют неймспейсов 😃
ии?... если у тебя два бина из рахных пакетов с одним набором пропертей - все пучком
Для тебя это mybean.myprop
неа
Mybean - это и есть неймспейс в этом случае
Ну класс любой
Между фронтэндом/бекендом общаться
где тут namespaced-keywords ? 😃
Вроде бы датомы/триплеты в Datomic/DataScript :user/id, :user/name
@roman01la пасиба. запишем это в категорию "всякие data-query dsl либы" (не только sql)
Ещё в Rum "приватные" поля в стейте компонента
подозреваю, что это кейворды типа :: ? (без явного неймспейса)
Например :rum/args
Для юзера он явный, когда нужно прочитать поле
Что-то мне подсказывает, ты не до конца понимаешь, что такое :: и как его использовать
хм... может быть. и что такое :: и как его использовать?
я всегда думал что это синтаксический сахар для reader'а, который подставляет текущий неймспейс (из ns) в качестве неймспейса для кейворда... я ошибаюсь ?
Вроде всё так. Только тогда либо я плохо диалог про рум попарсил, либо "без явного неймспейса" не вяжется с :: для рум/аргс
ну для чего удобно использьвать :: - у тебя, допустим, есть мепа, которую создал кто-то другой. например это ring-request. и ты хочешь к ней добавить свое поле, но боишься коллизий... используешь ::field вместо :field и все пучком
ближайший аналог в Python, например, это prefixed аттрибуты
при этом если сильно-сильно приспичит (при дебаге например), то все еще легко получить доступ к этому полю из другого неймспейса
так вот для меня лично я rum не знаю и не испытываю необходимости учить
посему при словах "приватные поля" возникла такая ассоциация...
а так, имхо не вижу разницы между ::rum/args и, например, :rum-args в данном ключе 😃
Ну рум - это пример либы, которая, чтоб ты не попутал свои клиентские поля со служебными полями либы - добавила свой неймспейс
ну так можно и без нейспейсов легко
но можно и с ними, не спорю.
Представь любой конфиг файл средего апликейшена - это, считай, свалка ки/велью, в которой ты можешь неймспейсы использовать вместо всяких подчеркиваний и прочего ада
ну если конфиги в стиле .properties - согласен. иначе это все равно древовидный объект
Всё можно без них, но зачем, если можно с ними? )
причем в json/yaml, где неймспейсы не юзают
С алиасами код будет лаконичнее
Не знаю что такое json, у меня всё в edn и транзите :kappa:
про алиасы - согласен, это да
про конфиги - ну пожалуйста. удачи
Везде, где сократить имя нельзя без костыля - хрен пойми какие сокращения используют, с которыми потом х## отдебыжишь кто что имел ввиду
для helloworld можно и в ini засунуть 😃
Замени любой ринговский киворд на такой же, только с дефисом вместо слеша, и попробуй код почитать
Хелло ворлд можно и на ассемблере налабать, или плату самому вытравить и спаять
а что такое "ринговский киворд" ?
я думал всегда что в ринге определены только кейворды без неймспейсов, https://github.com/ring-clojure/ring/blob/master/SPEC
Ринг.сервер.мидллвар.фубарбаз/порт какой-нибудь
вот смотрю на этот SPEC... не вижу там неймспейсов ?
где мне найти миддлвар.фубарбаз ?
Это ключи реквеста/респонса, думаю так слелали, что бы "удобненько", и чтобы быстрее сереализация была в строку. Это ж учасник перфоманс-сенситив кода
ну вот глянул мидлвар для сессии - там есть :session и :session/key... сильно сомневаюсь что :session-key было бы хуже 😃
учитывая что :session алиасами не сокращается
гляжу nested-params -- никаких неймспейсов
Не вижу, не буду искать
насчет сериализации в строку - а зачем request-response в строку сериализовывать? 🙂
в смысле там же не (pr-clj будет, а вполне себе (get request :body) и подобное
где без разницы совершенно какой это кейворд
Нууу, или что там по проводу передается :troll:
устал тебе продавать нс киворды. Никогда не пользуйся, оно того не стоит. Обман, чтоб набрать классы (с)
Я вам про неймспейсы скажу такую штуку: мне очень нравились неймспейсы в XML (и это было единственное, что там нравилось): очень легко разные структуры данных обогащать метаданными и аспектами, как с точки зрения создания, так и с точки зрения чтения.
Вот, namespaced keywords играют такую штуку для структур данных Clojure, причём не только для сериализации, но и в райнтайме.
Ключевое свойство здесь - композируемость. Можно взять две карты и слить их в одну, и всё будет продолжать работать.
Что ты тут теорию-то, конкретнее давай :kappa:
Вот, я когда-то это наваял, и неймспейсы были крайне в тему: http://doc.apsstandard.org/2.1/_downloads/package-format-specification-12.pdf
Есть ещё у нейспейснутых кивордов одна гигантская фича: если ты собираешься расковыривать что-то большое, неизвестное и плохо документированное, то на вопрос "откуда же эта <censored> <censored> штука приехала в функцию?" ответ ищется за минуту, а не за час.
я неймспейсед кейворды в re-frame использую, плюс CIDER их автокомлитит