Size: a a a

2020 May 16

ŹR

Źmićer Rubinštejn in pro.elixir
(cond ...)
источник

МЛ

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

МЛ

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

DR

Dmitry Russ (Aleksan... 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 ... end взять в обычные скобочки: ()
источник

МЛ

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

LL

Lama Lover in pro.elixir
Но лучший совет - всё-таки переписать этот ужас
источник

ŹR

Źmićer Rubinštejn in pro.elixir
В эликсире вообще лисп код валиден из коробки:
(Enum.map [1,2,3,4], &(&1+1))
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Lama Lover
Но лучший совет - всё-таки переписать этот ужас
И тут соглашусь полностью.
источник

МЛ

Михаил Лёсин... in pro.elixir
в 99% случаев оно у меня вот так выглядит:
      with :ok <- required(name),
          :ok <- start_with_letter(name),
          :ok <- valid_name(name) do

но для частного кейса сейчас есть вот такой фрагмент:
      with :ok <- required(name),
          :ok <-
            (cond do
               type == "episodes" -> start_with_letter_or_digit(name)
               true -> start_with_letter(name)
             end),
          :ok <-
            valid_name(name) do

как вы предлагаете это переписать? просто вынести cond в отдельную функцию ради одного её упоминания?
источник

LL

Lama Lover in pro.elixir
Михаил Лёсин
в 99% случаев оно у меня вот так выглядит:
      with :ok <- required(name),
          :ok <- start_with_letter(name),
          :ok <- valid_name(name) do

но для частного кейса сейчас есть вот такой фрагмент:
      with :ok <- required(name),
          :ok <-
            (cond do
               type == "episodes" -> start_with_letter_or_digit(name)
               true -> start_with_letter(name)
             end),
          :ok <-
            valid_name(name) do

как вы предлагаете это переписать? просто вынести cond в отдельную функцию ради одного её упоминания?
Угу, выносить код в функции вообще полезно для пищеварения
источник

LL

Lama Lover in pro.elixir
Михаил Лёсин
в 99% случаев оно у меня вот так выглядит:
      with :ok <- required(name),
          :ok <- start_with_letter(name),
          :ok <- valid_name(name) do

но для частного кейса сейчас есть вот такой фрагмент:
      with :ok <- required(name),
          :ok <-
            (cond do
               type == "episodes" -> start_with_letter_or_digit(name)
               true -> start_with_letter(name)
             end),
          :ok <-
            valid_name(name) do

как вы предлагаете это переписать? просто вынести cond в отдельную функцию ради одного её упоминания?
Потому что скорее всего этот код кто-то будет читать потом...
источник

МЛ

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

LL

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

МЛ

Михаил Лёсин... in pro.elixir
ясно, спасибо!
источник

LL

Lama Lover in pro.elixir
def start_with("episodes", name), do: start_with_letter_or_digit(name)
def start_with(_, name), do: start_with_letter(name)
источник

VS

Vladimir Sekisov in pro.elixir
Михаил Лёсин
впервые встречаюсь с таким компилятором. как будто это не компилятор а процессор макросов :)
да, обычно ожидается, что
конструкция типа do ... end
представляет собой отдельный лексический блок и парсится
соответственно,
но в elixir такого нет, принесено в жертву возможности создания
простых DSL,
поэтому создать блок
можно только скобками
источник

AK

Alexander Kladov in pro.elixir
всем привет. только изучаю эликсир, возникли вопросы, если кто-то поможет разобраться буду рад.
1. лямбда вызывается через точку перед скобками. как я понял для того,  чтобы визуально отлично лямбду от обычной функции. а для чего это нужно отличать?
2. не понял с чем связано ограничение в объявлении 1 структуры для 1 модуля.
3. нормальная ли это практика иметь несколько модулей(или других единиц кода, типа протоколов, имплементаций протоколов) внутри одного файла?
источник

PG

Pig Greenest in pro.elixir
Alexander Kladov
всем привет. только изучаю эликсир, возникли вопросы, если кто-то поможет разобраться буду рад.
1. лямбда вызывается через точку перед скобками. как я понял для того,  чтобы визуально отлично лямбду от обычной функции. а для чего это нужно отличать?
2. не понял с чем связано ограничение в объявлении 1 структуры для 1 модуля.
3. нормальная ли это практика иметь несколько модулей(или других единиц кода, типа протоколов, имплементаций протоколов) внутри одного файла?
2. структура это мапа с полем __struct__, в котором хранится название модуля, где она объявлена
источник

AK

Alexander Kladov in pro.elixir
Pig Greenest
2. структура это мапа с полем __struct__, в котором хранится название модуля, где она объявлена
я понимаю, но почему не сделать именованную структуру, с префиксом модуля например, что позволило бы иметь несколько структур на модуль?
источник

VS

Vladimir Sekisov in pro.elixir
1. для избежания конфликта
имен, чтобы отличить
вызов функции от вызова
лямбды в переменной
источник