Fork me on GitHub
#clojure-russia
<
2017-05-11
>
misha10:05:04

господа, я тут нахлобучил кусок кода, у которого есть апи. все функции апи принимают базу первым аргументом. в репле хочется немного удобнее, и я добавил нулевые арити, которые используют динамический вар. вопрос: как кошернее давать понять, что биндинг пустой (если он пустой) при вызове функции с 0 арити? проверять биндинг внутри каждой функции на пустоту, и бросать эксепшен? или ворнинг какой куда печатать?

misha10:05:37

задача вместо "nil" (22 строка) оповестить о том, что var *DB* пустой еще.

misha10:05:02

или этот подход вообще колхоз, и нужно сжав зубы передавать везде и всегда @conn? (речь идет скорее об использовании в репле, чем сорс коде)

dima10:05:53

если выбирать между print и exception, то я за exception потому что это явно показывает что api используется некорректно

dima11:05:05

а если в целом я бы передавал db явно аргументом

misha11:05:16

да меня задолбало это дб передавать в репле, особенно когда в 99.9999% случаев хочется на свежайшее значение посмотреть

misha11:05:13

в коде, понятно, что будет передаваться, например в rum-компонентах, а пока я даошки проверяю - аж трисёт уже

fmnoise11:05:56

господа, такой вопрос

fmnoise11:05:30

недавно вычитал в Clojure Applied, что экстендить протокол для протокола нельзя

fmnoise11:05:34

а на самом деле можно

fmnoise11:05:56

это бэд практис? или они просто потом допилили?

misha11:05:14

ну компоновка же лучше, чем наследование

fmnoise12:05:54

ну это само собой разумеется

fmnoise12:05:54

как по мне, то экстенд протокола протоколом все же выглядит приятнее чем тот воркераунд который они предлагают

dottedmag18:05:32

@misha Кидай эксепшн, и всё ок

misha18:05:26

@dottedmag а чем эксепшены от асёртов отличаются в этом случае?

dottedmag18:05:57

@misha асёрт - это механизм декларативного вызова экспшна, разве нет?

misha19:05:40

я спросил, что бы не думать!

fmnoise19:05:55

если вдруг кому интересно, спросил Миллера по этому вопросу

it really doesn’t work in all cases
the protocol generates a Java interface and you can for sure, extend a protocol to that interface
the problem is that not every protocol implementation implements that interface - only records or types that do so with an inline declaration like `(defrecord Foo [a] TheProtocol (foo ...))`
If you are implementing a protocol by using `extend-type` or `extend-protocol`, then those instances will NOT be caught by the extension of a protocol interface
So, you really shouldn’t do this :)

dottedmag20:05:22

Самая странная вакансия из тех, что я в последнее время видел: https://groups.google.com/forum/#!topic/clojure/M_fS9RvzgJY

dottedmag20:05:02

Окей, хуавей китайская компания, им нужен китайский язык, но зачем нанимать в Санта Кларе?

rmuslimov20:05:44

точно так же как и русские стартапы нанимают в долине с опцией знания русского языка

rmuslimov20:05:10

распределенная команда с коммуникацией на китайском

kishanov20:05:41

@dottedmag в санта кларе большой офис хуавея

kishanov20:05:22

они там держат в перемешку китайцев и американцев (в пропорции 10 к 1). они ходят по долине, ресерчат, тырят технологии и потом передают всему китаю

kishanov20:05:34

на моей прошлой работе мы им интегрировали OpenStack - я проторчал у них on-site 2 месяца, они приводили по 30 человек в команту слушать, потом натянули сами ватастек на свои хуавейские железки и нам денег не заплатили

rmuslimov20:05:17

нехорошие люди

andfadeev20:05:20

кстати а хенгаута по re-frame не было или я пропустил?

a.espolov20:05:14

@kishanov что такое вата стек?)

kishanov20:05:54

жаргон тех кто несколько лет проработал с openstack’ом

a.espolov20:05:51

а че сказали?