Size: a a a

2020 August 07

МВ

Михаил Варнавский... in pro.elixir
Всем привет! Подскажите пожалуйста, как на практике осуществляется подход Let it crash? Вот на примере :gen_tcp

{:ok, data} = :gen_tcp.recv(socket, 0)

Если вернулось {:error, :closed}, то необходимо завершить процесс. Это обрабатывается через case, например, или просто оставляется как есть? Типа "все равно упадет и процесс завершиться".
источник

AB

Alexey Bolshakov in pro.elixir
привет. процесс, в котором не сматчилось сам упадет
источник

МВ

Михаил Варнавский... in pro.elixir
ну и я не парюсь по этому поводу, верно? Просто немного непривычно в этой части еще ))))))
источник

LL

Lama Lover in pro.elixir
Михаил Варнавский
Всем привет! Подскажите пожалуйста, как на практике осуществляется подход Let it crash? Вот на примере :gen_tcp

{:ok, data} = :gen_tcp.recv(socket, 0)

Если вернулось {:error, :closed}, то необходимо завершить процесс. Это обрабатывается через case, например, или просто оставляется как есть? Типа "все равно упадет и процесс завершиться".
Процесс упадёт потому что не сматчилось. Но лично я понимаю let it crash как "Если происходит что-то неожиданное, нельзя придумать ничего лучше, чем рестартнуть процесс". Тут {:error, :closed} — достаточно ожидаемый результат
источник

МВ

Михаил Варнавский... in pro.elixir
согласен, ситуация вполне предсказуемая.
источник

AB

Alexey Bolshakov in pro.elixir
ну, если надо как-то отрабатывать еррор, то можно сделать case на оба варианта. и в варианте ошибки какие-то меры предпринимать. например, если коннект куда-то и не получается, если просто падать - он быстро несколько раз это повторит и потом все приложение уронит. а ты можешь это реализовать каким-то инкрементальным алгоритмом реконнекта
источник

МВ

Михаил Варнавский... in pro.elixir
ок. Насколько case идиоматично использовать? везде, вроде, написано, что чем меньше, тем лучше ))) Ну естественно, без фанатизма.
источник

AB

Alexey Bolshakov in pro.elixir
Михаил Варнавский
ок. Насколько case идиоматично использовать? везде, вроде, написано, что чем меньше, тем лучше ))) Ну естественно, без фанатизма.
решайте задачу, а не идиоматичность. она со временем придет
источник

МВ

Михаил Варнавский... in pro.elixir
ну это да ))
источник

LL

Lama Lover in pro.elixir
Alexey Bolshakov
решайте задачу, а не идиоматичность. она со временем придет
Золотые слова
источник

AD

Anastasiya Dyachenko in pro.elixir
Михаил Варнавский
ок. Насколько case идиоматично использовать? везде, вроде, написано, что чем меньше, тем лучше ))) Ну естественно, без фанатизма.
я обычно использую with, выглядит короче

with {:ok, data} <- :gen_tcp.recv(socket, 0) do
 ..
end


если будет error, то вернется error, но не упадет https://elixirschool.com/ru/lessons/basics/control-structures/#with
источник

AB

Alexey Bolshakov in pro.elixir
да. with удобная тема. когда нужно, чтобы все N условий выполнились.
источник

МВ

Михаил Варнавский... in pro.elixir
точно, про него забыл совсем
источник

МВ

Михаил Варнавский... in pro.elixir
спасибо )))
источник

LL

Lama Lover in pro.elixir
Кстати, раз тут упомянули with
Я один считаю, что для сохранения нормальной табуляции лучше писать?
with(
 {:ok, v1} <- f1(v0),
 {:ok, v2} <- f2(v1)
) do
 ...
end

Чем
with {:ok, v1} <- f1(v0),
    {:ok, v2} <- f2(v1) do
 ...
end
источник

AZ

Alex Zvezdochkin in pro.elixir
Плюс с with можно реализовать шаги, чтоб видеть где упало
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
Кстати, раз тут упомянули with
Я один считаю, что для сохранения нормальной табуляции лучше писать?
with(
 {:ok, v1} <- f1(v0),
 {:ok, v2} <- f2(v1)
) do
 ...
end

Чем
with {:ok, v1} <- f1(v0),
    {:ok, v2} <- f2(v1) do
 ...
end
Нормально, я вот не знал, что в нём скобки эти можно ставить
источник

AD

Anastasiya Dyachenko in pro.elixir
Lama Lover
Кстати, раз тут упомянули with
Я один считаю, что для сохранения нормальной табуляции лучше писать?
with(
 {:ok, v1} <- f1(v0),
 {:ok, v2} <- f2(v1)
) do
 ...
end

Чем
with {:ok, v1} <- f1(v0),
    {:ok, v2} <- f2(v1) do
 ...
end
так не делаю, но у меня другой бзик, выравниваю все стрелочки в линию
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
Кстати, раз тут упомянули with
Я один считаю, что для сохранения нормальной табуляции лучше писать?
with(
 {:ok, v1} <- f1(v0),
 {:ok, v2} <- f2(v1)
) do
 ...
end

Чем
with {:ok, v1} <- f1(v0),
    {:ok, v2} <- f2(v1) do
 ...
end
А в этих скобках trailing запятую можно писать?
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
А в этих скобках trailing запятую можно писать?
Не знаю
UPD Проверил — нельзя
источник