Fork me on GitHub
#clojure-russia
<
2017-04-28
>
artemyarulin13:04:00

Вот тут на кор.асинк набрасывают http://realworldclojure.com/on-the-judicious-use-of-core.async/

fmnoise13:04:18

дада, лоу левел и воще какаха

misha14:04:12

как же дальше жить

fmnoise14:04:17

не, ну с другой стороны он правильные вещи пишет

fmnoise14:04:38

что надо с умом какбе

misha14:04:08

всегда жеж "надо с умом"

fmnoise14:04:51

не, рельсу надо без ума

fmnoise14:04:57

иначе больно

misha14:04:01

рельсу просто не надо

fmnoise14:04:08

ну если очень хочется

fmnoise14:04:18

то главное не задумываться

misha14:04:31

напоминалочка https://www.youtube.com/watch?v=FihU5JxmnBg

Debugging with the Scientific Method - Stuart Halloway

fmnoise14:04:48

да, хороший ток

fmnoise14:04:31

кстати

fmnoise14:04:50

ни разу не видел чтобы кто-то использовал continuation в руби

fmnoise14:04:12

типа too much brain needed

misha14:04:05


For instance:

require "continuation"
arr = [ "Freddie", "Herbie", "Ron", "Max", "Ringo" ]
callcc{|cc| $cc = cc}
puts(message = arr.shift)
$cc.call unless message =~ /Max/
dafuq

fmnoise14:04:29

ну вот да

fmnoise14:04:34

кроме документации не встретишь

fmnoise14:04:41

и даже catch|throw

misha14:04:30

я руби не знаю, и что тут написано - тоже

fmnoise14:04:41

наверное дхх не рекомендует

misha14:04:49

но выглядит оно отвратительно и дофига разнообразно

fmnoise14:04:29

выглядит оно как плохо замаскированное гото

misha14:04:36

особенно пробелы вокруг = внутри скобок, привет PEP8 troll

fmnoise14:04:03

вообще скобок не надо, это самый писк

fmnoise14:04:12

omit () where possible

misha14:04:27

ужасно

fmnoise14:04:47

это спецом чтобы потом на лисп пальцами тыкать

fmnoise14:04:54

типа вах дикари

fmnoise14:04:21

в кофе тоже такая тема

misha14:04:37

а что из этого - континуэйшн-то? )

fmnoise14:04:38

только там оно смешные формы приобретает

fmnoise14:04:03

callcc{|cc| $cc = cc}
# здесь мутация
$cc.call

fmnoise14:04:35

читай

label: cc
# мутация
goto cc

misha14:04:40

а что такое callcc{|cc| $cc = cc}? я совсем не шутил, когда сказал "ниче не понимаю тут"

fmnoise14:04:04

это лейбл типа

fmnoise14:04:06

для перехода

fmnoise14:04:28

читай как "давайте представим это место в коде как метку и присвоим ее глобальной переменной $cc"

fmnoise14:04:46

а потом сделаем $cc.перейти

fmnoise14:04:55

гото в чистом виде

misha14:04:58

а зачем сс 3 раза?

fmnoise14:04:48

это синтаксис блока

misha14:04:53

или даже 4, потому что кажется мне - callcc - это call cc без пробела почему-то

fmnoise14:04:57

callcc передает метку в блок

fmnoise14:04:05

сс там это метка

fmnoise14:04:14

континуейшн

fmnoise14:04:32

и мы присваиваем ее переменной $cc

misha14:04:41

тоесть cc в callсс - к трём cc справа отношения не имеет?

fmnoise14:04:54

можно так

misha14:04:04

а что такое блок?

misha14:04:12

думаю с меня хватит.

fmnoise14:04:13

callcc {|meto4ka| $meto4ka = meto4ka}

fmnoise14:04:25

callcc {|label| $meto4ka = label}

fmnoise14:04:45

callcc {|xyz| $abc = xyz}

misha14:04:56

зачем 2 раза xyz?

fmnoise14:04:02

ну как в let

fmnoise14:04:10

один раз декларируем

fmnoise14:04:15

второй используем

misha14:04:30

ок, ладно, спасибо. troll

fmnoise14:04:32

это ты еще метапрограммирования не видел

fmnoise14:04:37

в руби

misha15:04:09

да я "АШ - водород" это всё :D

fmnoise15:04:03

хорошо тебе

fmnoise15:04:07

а мне с этим жить)))

misha15:04:21

пофиксил референс opieop

misha20:04:18

господа, а можно как-то чётче смерджить 2 хешмапы с разными уровнями вложенности?

(merge-with
  (partial merge-with merge)
  {:a {:b 1}
   :c 2}
  {:a {:d 3}})
=> {:a {:b 1, :d 3}, :c 2}

misha20:04:39

как-то оно слишком хрупко выглядит, и работает только с 2 уровнями вложенности, перезаписывая значения в на втором. как вообще взрослые дядьки такое решают?

kishanov21:04:47

(defn deep-merge
  [& vals]
  (if (every? map? vals)
    (apply merge-with deep-merge vals)
    (last vals)))

misha21:04:05

(defn merge-nested
  "Recursively merge two Clojure trees of maps."
  [v1 v2]
  (if (and (map? v1) (map? v2))
    (merge-with merge-nested v1 v2)
    v2))

kishanov21:04:28

ну или так

kishanov21:04:32

мульоны способов

misha21:04:18

но и там и там можно стековерфлоу схватить, если захотеть

niquola22:04:30

;) эта реализация жутко тормозит на глубоких больших мапах

misha22:04:55

какая из?