Size: a a a

2019 February 19

AB

Alex Bubnov in pro.elixir
ахаха, я вспомнил, как у меня подгорело от зависимости tzdata от hackney
источник

AB

Alex Bubnov in pro.elixir
был случай, когда я эту тздату транзитивно подтащил в проект и у меня случился конфликт версий hackney
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я ща делал Aqua, и не потащил httpoison изза этой своей статьи
источник

ŹR

Źmićer Rubinštejn in pro.elixir
А потом оказалось, что в архивах нельзя зависимости вообще
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я бы охуел там форкать, а так повезло - httpc и вперед
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я по этой причине yaml выкинул, оставил только json
источник

ŹR

Źmićer Rubinštejn in pro.elixir
потому что у jason один файл стырил - и все
источник

ŹR

Źmićer Rubinštejn in pro.elixir
А с yaml - там libyaml и какая-то жопа
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Źmićer Rubinštejn
Исходный файл
defmodule Test do
 def to_try(arg) do
   arg
 else
   :ok -> :hit
   _ -> :no_hit
 end

 def to_case(arg) do
   case arg do
     :ok -> :hit
     _ -> :no_hit
   end
 end
end


Результат компиляции:
-module('Elixir.Test').

-compile([no_auto_import]).

-export(['__info__'/1, to_case/1, to_try/1]).

-spec '__info__'(attributes | compile | functions |
                macros | md5 | module | deprecated) -> any().

'__info__'(module) -> 'Elixir.Test';
'__info__'(functions) -> [{to_case, 1}, {to_try, 1}];
'__info__'(macros) -> [];
'__info__'(Key = attributes) ->
   erlang:get_module_info('Elixir.Test', Key);
'__info__'(Key = compile) ->
   erlang:get_module_info('Elixir.Test', Key);
'__info__'(Key = md5) ->
   erlang:get_module_info('Elixir.Test', Key);
'__info__'(deprecated) -> [].

to_case(_arg@1) ->
   case _arg@1 of
     ok -> hit;
     _ -> no_hit
   end.

to_try(_arg@1) ->
   try _arg@1 of
     ok -> hit;
     _ -> no_hit
   end.
  def to_try(arg) do
   arg
 rescue
   exception in bla -> :hit
   _ -> :no_hit
 end
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Есть rescue - а else очень неинтуитивно названно.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
rescue подразумевает падение, разве нет?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Оно не вызовется в том примере
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Źmićer Rubinštejn
Оно не вызовется в том примере
Да, другая семантика.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Я просто к тому, что за безобидным else - скрывается try - не очень хорошо.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
     def to_try(value) do
       foo!
     catch
       :exit, reason -> {:error, reason}
     end
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
C catch и rescue семантика понятна, но почему в esle должен быть try?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Потому что def заворачивает в try
источник

ŹR

Źmićer Rubinštejn in pro.elixir
И больше ни во что
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
А, все, да, понял
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
try do
 ...
catch
 ... ->
   ...
rescue
 ... ->
   ...
else
 ... ->
   ...
after
 ... ->
end
источник