2017-08-11 1 views
1

Je voudrais utiliser un module attribute@magic_constant à la fois TypeSpec ainsi que des gardes:Elixir: attribut module spécification de type

defmodule Example do 
    @magic_constant 1 

    @type t :: @magic_constant 

    def f(i) when i == 1 do 
     :ok 
    end 
end 

Quand j'essayer avec Elixir v1.5, l'erreur de compilation suivante est signalée :

== Compilation error in file lib/example.ex == 
** (CompileError) lib/example.ex:4: type '@'(_) undefined 
    (stdlib) lists.erl:1338: :lists.foreach/2 
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6 
[1] 17240 exit 1  mix compile 

Existe-t-il un moyen d'utiliser une constante dans les gardes et les typespecs?

Répondre

4

Vous pouvez utiliser unquote pour injecter la valeur de l'attribut de module dans le typepec.

defmodule Example do 
    @magic_constant 1 

    @type t :: unquote(@magic_constant) 
end 
iex(1)> t Example 
@type t() :: 1