"спецификация имеет неправильную арность", замеченную при использовании предложения охраны для определения спецификации Эликсира
Вот код, к которому я пытаюсь добавить спецификацию.
@spec failure(term) :: error(term)
@spec failure(reason) :: error(reason) when reason: term
defmacro failure(reason) do
quote do
{:error, unquote(reason)}
end
end
Первое определение спецификации работает отлично. Однако я хочу прояснить, что если причина является целым числом, то возвращаемая ошибка также будет содержать целое число. Вторая спецификация не работает. ошибка
Compiling 1 file (.ex)
== Compilation error in file lib/ok.ex ==
** (CompileError) lib/ok.ex:71: spec has wrong arity
(stdlib) lists.erl:1338: :lists.foreach/2
(stdlib) erl_eval.erl:677: :erl_eval.do_apply/6
1 ответ
Предоставленный вами код прекрасно работает с функциями (в отличие от макросов). Даже набор тестов Elixir для типов спецификаций имеет только тесты функций с защитой в спецификациях.
Я не могу сказать, если это еще не реализовано или это ошибка или что. Я полагаю, что вам лучше задать вопрос непосредственно в Elixir maillist и / или на форуме Elixir. Или же. может быть, стоит подать вопрос.