Size: a a a

2020 May 16

ЭК

Элис Коенс in pro.elixir
источник

МЛ

Михаил Лёсин... in pro.elixir
а почему нельзя так:
with :ok <- something(),
    :ok <- cond do
             a>b -> one_branch()
             true -> another_branch()
           end,
    :ok <- something_more() do
  :ok
end
эликсир ругается на "end,"
при этом вот так
with :ok <- something(),
    {:ok} <- {cond do
                a>b -> one_branch()
                true -> another_branch()
              end},
    :ok <- something_more() do
  :ok
end
оно работает, но у меня появляется лишняя вложенность которая мне не нужна, она ломает мой возврат ошибок, т.к. вместо {:error, reason} я теперь могу получить ещё и {{:error, reason}}
источник

LL

Lama Lover in pro.elixir
Михаил Лёсин
а почему нельзя так:
with :ok <- something(),
    :ok <- cond do
             a>b -> one_branch()
             true -> another_branch()
           end,
    :ok <- something_more() do
  :ok
end
эликсир ругается на "end,"
при этом вот так
with :ok <- something(),
    {:ok} <- {cond do
                a>b -> one_branch()
                true -> another_branch()
              end},
    :ok <- something_more() do
  :ok
end
оно работает, но у меня появляется лишняя вложенность которая мне не нужна, она ломает мой возврат ошибок, т.к. вместо {:error, reason} я теперь могу получить ещё и {{:error, reason}}
предлагаю тебе вынести cond в отдельную функцию
источник

МЛ

Михаил Лёсин... in pro.elixir
это ясно, я пытаюсь понять что я нарушаю в синтаксисе
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Михаил Лёсин
это ясно, я пытаюсь понять что я нарушаю в синтаксисе
end - это конец with а не cond в первом варианте
источник

МЛ

Михаил Лёсин... in pro.elixir
как интересно
источник

МЛ

Михаил Лёсин... in pro.elixir
а почему? :)
источник

LL

Lama Lover in pro.elixir
Михаил Лёсин
это ясно, я пытаюсь понять что я нарушаю в синтаксисе
with :ok <- something(),
    :ok <- cond
do
 a>b -> one_branch()
 true -> another_branch()
end
источник

МЛ

Михаил Лёсин... in pro.elixir
разве блоки кода не обязаны быть вложенными? :)
источник

МЛ

Михаил Лёсин... in pro.elixir
хм
источник

МЛ

Михаил Лёсин... in pro.elixir
а как бы ему тогда сказать что это "do" не для "with", а для "cond"?
источник

LL

Lama Lover in pro.elixir
Михаил Лёсин
а как бы ему тогда сказать что это "do" не для "with", а для "cond"?
Круглые скобки
источник

МЛ

Михаил Лёсин... in pro.elixir
впервые встречаюсь с таким компилятором. как будто это не компилятор а процессор макросов :)
источник

PG

Pig Greenest in pro.elixir
ты не поверишь
источник

LL

Lama Lover in pro.elixir
Михаил Лёсин
а почему нельзя так:
with :ok <- something(),
    :ok <- cond do
             a>b -> one_branch()
             true -> another_branch()
           end,
    :ok <- something_more() do
  :ok
end
эликсир ругается на "end,"
при этом вот так
with :ok <- something(),
    {:ok} <- {cond do
                a>b -> one_branch()
                true -> another_branch()
              end},
    :ok <- something_more() do
  :ok
end
оно работает, но у меня появляется лишняя вложенность которая мне не нужна, она ломает мой возврат ошибок, т.к. вместо {:error, reason} я теперь могу получить ещё и {{:error, reason}}
А вообще, этот код выглядит ужасно, если честно
источник

МЛ

Михаил Лёсин... in pro.elixir
это валидация, у меня один частный кейс в ней, не хочется из-за него городить функцию отдельную
источник

LL

Lama Lover in pro.elixir
Михаил Лёсин
впервые встречаюсь с таким компилятором. как будто это не компилятор а процессор макросов :)
Ну смотри, парсер парсит это как набор вызовов функций. Типа если нет скобок, то это оператор
источник

МЛ

Михаил Лёсин... in pro.elixir
Lama Lover
Круглые скобки
не пойму куда их вкрячить то...
источник

PG

Pig Greenest in pro.elixir
вокруг cond?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Михаил Лёсин
не пойму куда их вкрячить то...
как в лиспе же
источник