This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-01-10
Channels
- # beginners (97)
- # boot (77)
- # cider (7)
- # cljs-dev (47)
- # cljsrn (3)
- # clojure (125)
- # clojure-austin (5)
- # clojure-dusseldorf (1)
- # clojure-italy (4)
- # clojure-russia (91)
- # clojure-spec (80)
- # clojure-uk (54)
- # clojurescript (92)
- # core-async (6)
- # cursive (17)
- # datomic (56)
- # hoplon (7)
- # immutant (3)
- # liberator (3)
- # luminus (4)
- # off-topic (26)
- # om (41)
- # om-next (11)
- # pedestal (3)
- # perun (3)
- # protorepl (25)
- # re-frame (32)
- # reagent (33)
- # ring (46)
- # rum (3)
- # spacemacs (5)
- # specter (82)
- # test-check (16)
- # untangled (8)
- # yada (26)
@artemyarulin Никак лучше. Ключи в неймспейсе, неймспейс - часть полного имени ключа. Вот приходит к тебе в вызов мапа, а в ней лежат :person/id
, :transaction-store/id
и :order/id
. Как будешь доставать?
точно да, спасиб
@dottedmag огромное спасибо. буду проверять. код запостю а то неприлично
(у меня там что-то вроде
(defn init [passed-callback]
(let [assetsDir (-> (Assets. (neko.App/instance)) (.syncAssets))]
(-> (SpeechRecognizerSetup/defaultSetup)
(doto
(.addListener (reify edu.cmu.pocketsphinx.RecognitionListener
(onPartialResult [_ hypothesis]
(when-let [h hypothesis]
(passed-callback (.getHypstr h)))) )) ))))
(defn heard-callback [hypothesis]
...
)
(defn start []
(init heard-callback)
)
@leov Да, так и есть -- когда ты вызываешь, (init heard-callback)
, Clojure разыменовывает оба Var`а, и в init
приезжает функция-значение. Нужно #'heard-callback
передавать.
Как происходит evaluation списка? Clojure evaluate первый символ, смотрит, не функция ли это. Если функция, то evaluate'ит остальные аргументы и передаёт в функцию.
@mike1452, ничего, кложе-программисты успешно вернули всё это обратно, повсеместно принимая component
библиотеку вместо mount
как промышленный стандарт
Как происходит evaluation символа - clojure находит соответствующий Var и смотрит, что внутри.
@leov Я даже не знаю, что читать. Я это понял, посмотрев несколько раз видео, где Рич рассказывает про state model.
А почему тут называют кложу кложей? Википедия говорит /ˈkloʊʒɜːr/, так что должно быть что-то вроде "кложура".
надо так) я называю clojure 1️⃣ кложа 2️⃣ кложура 3️⃣ клоджар
@leov я думаю тут все же речь идет о конкретной библиотеке. На сам язык, идеологию языка это решение никак не влияет. Интересно было бы увидеть tradeoff когда они принимали решение mount vs component. Может быть в том контексте component выглядел практичнее.
Да, только Монти Пайтон это имя собственное и британское, так что есть только один правильный способ произношения.
@andre Это же intended pun: https://dottedmag.net/~dottedmag/clozhure.png
@dottedmag что это значит?
а кто-нибудь может прислать базовый пример роутинга на реакте? например с использованием rum
у меня есть кейворд и префикс, хочу сделать namespace-qualified keywords. keyword могет но принимает 2 строки, поэтому получается не красиво
(let [k-ns :customer
k-v :name]
(keyword (name k-ns) (name k-v))) ;; => :customer/name
ничо нету больше?это мне? дак просто как-то глупо выглядит есть 2 кейворда, сконвертить их оба в строки обратно чтоб получить новый кейворд. Вот думаю дай спрошу мож чо лучше есть
@artemyarulin Тебе не дожно быть нужно этого делать. Расскажи задачу.
люблю русскоязычные сообщества - как сделать Х? Тебе это не нужно (с)
@artemyarulin Вообще-то это очень старое правило, и не русскоязычное: http://www.catb.org/~esr/faqs/smart-questions.html#goal
Манипуляции с ключевыми словами практически никогда не нужны, это же просто идентификаторы.
В копилку про контекст, глобальный стейт и re-frame https://github.com/Day8/re-frame/issues/137#issuecomment-268376844
@artemyarulin это самый полезный ответ - который можно получить 🙂
@artemyarulin норм. Это не конверсия, строки внутри кейворда как поля всё равно лежат
ну и да, юз-кейс выглядит сомнительно, если нужны манипуляции такого рода, тут какая-то система идентификации на кейвордах похоже что строится
т.е. если такое нужно, то непонятно почему лепить нужно из кейвордов, скорее всего исходный материал надо представлять строками
ну и еще про «не нужно этого хотеть». Я думаю под этим подразумевается что-то типа http://xyproblem.info/, т.е. без обид, просто хотят помочь с исходной проблемой, и вопрос — часть того, что нужно исправить
@tonsky Генерировать кейворды нехорошо и практически. Хотя бы потому, что они интернятся и не собираются GC.
есть например cljs-ajax и он умеет ключи в кейворды конвертить, но они без неймспейсов, а хочется чтобы были с namespace
@dottedmag ну ты врядли нагенеришь тысячи кейвордов
@dragoncube Зависит от того, что ты делаешь, а этого как раз @artemyarulin и не сказал.
@dottedmag ну приехали тебе данные с сервера и ты их в свое представление конвертишь, чтобы потом спеками обложить и все такое и удобно переименовывать не задевая все такие же кейворды использующиеся в других кусках
Валидацию можно и без неймспейса производить, в спеке же есть опция для этого, а после валидации сырой JSON-ответ использовать неудобно.
ну идея в том что могут появляться данные с внешних ресурсов которые нужно конвертить во внутреннее представление
Для этого спека дестуктурит, и можно из этого нужный вид собрать. JSON - штука убогая, так что в любом случае какую-то конверсию делать.
хотел уже написать зачем оно мне надо, но вы тут так интересно все обсуждаете что я наверно пока подожду
>В cljs не интернятся. ага, про CLJS вопрос. А чем это грозит?
@artemyarulin В CLJS созданные keywords GC-ятся, так что долгоиграющие программы, создающие keywords, не упадут от ENOMEM
хм, тогда зачем оно в CLJ вообще?
А JVM кста строки то не интерирует?
понятно спасибо
>тут какая-то система идентификации на кейвордах похоже что строится
tonsky прям все видит. Если кому интересно, делаю БД на CLJS. В основе EAV модель где ключами выступают [entity-name attr-name id]
. Но для простоты работы с ним на вход принимаются обычные мапы #:person {:age 22 :name “Joe”}
будет сконверчено в (sorted-map [:person :age 1] 22 [:person :name “Joe”])
. Отсюда и необходимость работы с кейвордами
Там в реальности чутка сложнее, но если кому очень любопытно то можно посмотреть тут https://github.com/artemyarulin/zerol/blob/master/db_test.cljc#L50
Ну... Фиг знает. Развалится ведь, если подать на вход карту с ключами из разных неймспейсов?
ага развалится
Если так, то может [:person {:age 22 :name "Joe"}]
не хуже? А нейспейснутую версию сделать как сахар сверху для тех, у кого квадратные скобки на клавиатуре не работают.
а вариант слушай. Да хз - я уже третий раз все переписываю с нуля, так что когда до юз кейсов дойду тогда и увидим, счас пока на костылях хочу убедится что в этом всем есть смысл
да мне наверно просто 1.9 новый синтаксис #:ns {:k1 v1 :k2 v2}
понравился вот я его везде и вставляю 🙂