如何在Elixir中输入typepec泛型

时间:2017-05-23 16:56:49

标签: generics types erlang elixir

我在elixir中实现了一个平衡搜索树,它用作一个键值存储。

我有一个方法from_list,它接受​​一个键值元组列表并返回一个树。有没有办法像使用强类型语言一样使用泛型来进行类型规划?

@spec from_list([{key_type, value_type}]) :: tree(key_type, value_type)
def from_list(list), do: 

当我尝试这个时,我得到一个错误。 Elixir中是否有仿制药?或者我是否必须将其列为{any,any}类型的列表?

1 个答案:

答案 0 :(得分:4)

@spec from_list([{key_type, value_type}]) :: tree(key_type, value_type) when key_type: var, value_type: var

来自https://hexdocs.pm/elixir/typespecs.html

  

Guards可用于限制作为函数参数给出的类型变量。

@spec function(arg) :: [arg] when arg: atom
     

如果要指定多个变量,请用逗号分隔它们。

@spec function(arg1, arg2) :: [arg1, arg2] when arg1: atom, arg2: integer
     

也可以定义没有限制的类型变量。

@spec function(arg) :: [arg] when arg: var