Size: a a a

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

2020 March 06

TP

Tim Plotnikov in Clojure — русскоговорящее сообщество
Вот часть мапы:
{:start [10 30]
 :end [16 30]}


Вот спека:
(s/def ::minute-entry #(or (= % 30) (= % 0)))
(s/def ::hour-entry (s/and int? #(<= 0 % 23)))
(s/def ::time-entry (s/tuple ::hour-entry ::minute-entry)) ;; нас интересует вот эта time-entry


Соответственно, мне нужно чтобы :start & :end соответствовали ::time-enty. Но map-of я не могу использовать так как в мапе есть ещё один ключ, который надо проверить по другой спеке.
s/keys не уверен что смогу использовать, т.к. два ключа с разными именами должны соответствовать одному предикату.
источник

TP

Tim Plotnikov in Clojure — русскоговорящее сообщество
Если spec так не может или для этого не предназначена (что хотя было бы странно), думаю проще будет написать функцию validate :)
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
для инта в диапазоне есть s/int-in-range?
источник

TP

Tim Plotnikov in Clojure — русскоговорящее сообщество
Ivan Grishaev
для инта в диапазоне есть s/int-in-range?
О, крутяк, спасибо
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
ну а дальше так (s/def ::schedule (s/keys :req-un [:schedule/start :schedule/end]) )
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
(s/def :schedule/start ::time-entry)
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
(s/def :schedule/end ::time-entry)
источник

TP

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

TP

Tim Plotnikov in Clojure — русскоговорящее сообщество
Спасибо)
Должно сработать хорошо, хотя если честно не так уж и элегантно 😅
В том смысле что может я конечно неправильно понял назначение спеки, но было бы прикольно если ей бы можно было описать тип.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Спека работает на предикатах. Тип можно проверить через string?, int? etc
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
предикат на кастомный тип можно задать так
(def foo? (partial instance? java.util.Foo))
источник

TP

Tim Plotnikov in Clojure — русскоговорящее сообщество
Что за partial?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Partial application
источник

TP

Tim Plotnikov in Clojure — русскоговорящее сообщество
А, типа чтобы не писать #(instance? java.util.Foo %)?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Да
источник

TP

Tim Plotnikov in Clojure — русскоговорящее сообщество
А есть у partial application какое-нибудь влияние на перф?
источник

MN

Maksim N in Clojure — русскоговорящее сообщество
Почему у этого бота тестовый вопрос (10 + 4), а не (+ 10 4)?
источник

T

Timmy B in Clojure — русскоговорящее сообщество
потому что зрада
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Tim Plotnikov
А есть у partial application какое-нибудь влияние на перф?
Ну он ж по идее тупо в лямбду заворачивает аргументы, не думаю, что тут есть о чем беспокоиться
источник

TP

Tim Plotnikov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Ну он ж по идее тупо в лямбду заворачивает аргументы, не думаю, что тут есть о чем беспокоиться
ok
источник