Size: a a a

Clojure — русскоговорящее сообщество

2019 June 05

DA

Daniil Arsentiev in Clojure — русскоговорящее сообщество
ShadowJs? Сам не пробовал, поумничаю
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
источник

DA

Daniil Arsentiev in Clojure — русскоговорящее сообщество
Ivan Grishaev
> Как вам стэк в статье описанной?
сначала бесило, а потом наоборот привык все на компонентах и протоколах писать. В итоге гибче и строже одновременно получается.
Помню как полгода назад был бугурд по поводу одной книги про clean architecture. Одной из главных претензий был оверинженеринг на протоколах и не кложавей. Что поменялось?
источник

DA

Daniil Arsentiev in Clojure — русскоговорящее сообщество
Без претензий. Просто любопытно...
источник

a

abc in Clojure — русскоговорящее сообщество
Нашел. Оказывается в последних версия ClojureScript можно так
источник

a

abc in Clojure — русскоговорящее сообщество
источник

YK

Yurii Khmelevskii in Clojure — русскоговорящее сообщество
подскажите, а можно с объявления спеки получить кейворд? Я имею ввиду следующее:
(s/def ::id pos-int?)

мне нужно получить :id
источник

YK

Yurii Khmelevskii in Clojure — русскоговорящее сообщество
то есть я хочу в конечно итоге толучить возможность ссылаться на описанные спекой филды. Например:
(def my-fields [:my-specs/id :my-specs/name]

при попытке использовать неописанный спекой филд я получу ошибку в компайл тайме
источник

DS

Denis Shilov in Clojure — русскоговорящее сообщество
Это можно сделать, но не совсем понятно первое - что значит получить :id ? Сделать форму, которая определяет спеку и возвращает ее идентификатор ? Чтобы можно было сразу объявить и использовать ?
источник

DS

Denis Shilov in Clojure — русскоговорящее сообщество
Или просто проверить что такая спека существует где-то в другом месте ?
источник

AD

Artur Dumchev in Clojure — русскоговорящее сообщество
Yurii Khmelevskii
то есть я хочу в конечно итоге толучить возможность ссылаться на описанные спекой филды. Например:
(def my-fields [:my-specs/id :my-specs/name]

при попытке использовать неописанный спекой филд я получу ошибку в компайл тайме
Это имеешь в виду?
https://clojure.org/guides/spec#_specing_functions
(s/and (s/cat :start int? :end int?)
      #(< (:start %) (:end %)))
источник

AD

Artur Dumchev in Clojure — русскоговорящее сообщество
Там выше есть еще примеры с s/keys :req
источник

YK

Yurii Khmelevskii in Clojure — русскоговорящее сообщество
я хочу получить возможность обращаться к обявленным спекам и конвертировать имя этой спеки в кейворд. То есть мне нужен, как бы enum, значения которого я буду использовать из вне. Попробую объяснить примером:
;; my-specs.clj

(s/def ::id int?)
(s/def ::name string?)


;; my-some-module.clj
(require [my-specs :as ms])

(def fields
 [:ms/id
  :ms/name])

;; => [::my-specs/id ::my-specs/name]

но это не работает

И если я попробовал бы использовать несуществующий кейворд, я бы получил ошибку в компайл тайме, например
;; my-some-module2.clj
(require [my-specs :as ms])

(def fields
 [:ms/id
  :ms/first-name]) ;; <= error
источник

DS

Denis Shilov in Clojure — русскоговорящее сообщество
но почему :ms/id а не ::ms/id ? Это так и задумано или опечатка ?
источник

DS

Denis Shilov in Clojure — русскоговорящее сообщество
В общем нужна функция, которая проверит что все кейворды в коллекции имеют спеку ?
источник

DS

Denis Shilov in Clojure — русскоговорящее сообщество
Yurii Khmelevskii
я хочу получить возможность обращаться к обявленным спекам и конвертировать имя этой спеки в кейворд. То есть мне нужен, как бы enum, значения которого я буду использовать из вне. Попробую объяснить примером:
;; my-specs.clj

(s/def ::id int?)
(s/def ::name string?)


;; my-some-module.clj
(require [my-specs :as ms])

(def fields
 [:ms/id
  :ms/name])

;; => [::my-specs/id ::my-specs/name]

но это не работает

И если я попробовал бы использовать несуществующий кейворд, я бы получил ошибку в компайл тайме, например
;; my-some-module2.clj
(require [my-specs :as ms])

(def fields
 [:ms/id
  :ms/first-name]) ;; <= error
(spec/def ::id int?)
(spec/def ::name string?)

(defmacro checking [coll]
 (let [no-spec (filter #(not (spec/get-spec %)) coll)]
   (when (seq no-spec)
     (throw (Exception. (str "Invalid keywords detected: " (seq no-spec)))))

   coll))

(def fields
 (checking
   [::id ::name]))


вот так я понял эту задачу. Но вообще вот это какая-то дорога не туда
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
А просто список Спек нельзя получить ?
источник

DS

Denis Shilov in Clojure — русскоговорящее сообщество
spec/registry
источник

YK

Yurii Khmelevskii in Clojure — русскоговорящее сообщество
спасибо за spec/registry
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Daniil Arsentiev
Помню как полгода назад был бугурд по поводу одной книги про clean architecture. Одной из главных претензий был оверинженеринг на протоколах и не кложавей. Что поменялось?
там была другая крайность, а так протоколы и рекорды нужны, особенно в библиотеках, чтобы другие чуваки могли расширять
источник