我在elixir中实现了一个平衡搜索树,它用作一个键值存储。
我有一个方法from_list
,它接受一个键值元组列表并返回一个树。有没有办法像使用强类型语言一样使用泛型来进行类型规划?
@spec from_list([{key_type, value_type}]) :: tree(key_type, value_type)
def from_list(list), do:
当我尝试这个时,我得到一个错误。 Elixir中是否有仿制药?或者我是否必须将其列为{any,any}类型的列表?
答案 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