在具有泛型的静态类型语言(如C#)中,我可以在方法签名中指定每个映射的键都是一个原子,每个值都是{string,int}元组的列表。如何为Elixir中的函数参数定义类型规范?
PS:如果您正在阅读本文并且评分为> 1500,那么请您创建一个类型规范标记。
答案 0 :(得分:12)
您可以这样定义:
@type bar :: %{atom => [{binary, integer}]}
@spec foo(bar) :: bar
def foo(bar), do: bar
上面定义了一个新类型,它是原子键到二进制/整数元组列表的映射,然后在foo
的类型规范中使用该类型。
答案 1 :(得分:1)
对于内联规范,它是这样的:
defmodule LousyCalculator do
@spec add(number, number) :: {number, String.t}
def add(x, y), do: {x + y, "You need a calculator to do that?!"}
@spec multiply(number, number) :: {number, String.t}
def multiply(x, y), do: {x * y, "Jeez, come on!"}
end
如果你期望一个结构,那么类型是:
@spec struct_returner_and_getter(%Struct_name1{}) :: %Struct_name2{}
来源:http://elixir-lang.org/getting-started/typespecs-and-behaviours.html