elixir:定义map / hashdicts的类型规范

时间:2014-05-13 02:55:50

标签: generics types static-analysis elixir

在具有泛型的静态类型语言(如C#)中,我可以在方法签名中指定每个映射的键都是一个原子,每个值都是{string,int}元组的列表。如何为Elixir中的函数参数定义类型规范?

PS:如果您正在阅读本文并且评分为> 1500,那么请您创建一个类型规范标记。

2 个答案:

答案 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