2017-05-23 60 views
0

我在elixir中實現了一個平衡搜索樹,它作爲一個關鍵值存儲。如何在Elixir中類型化泛型

我有一個方法from_list它接受關鍵值元組列表並返回一個樹。有沒有辦法使用泛型類型化這種方式,我會用強類型語言來做?

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

當我嘗試這個時,我得到一個錯誤。 Elixir中是否有泛型?或者我必須將它列爲{any,any}類型的列表?

+0

的'MapSet'模塊限定了有點像泛型(參見類型difference'和'union'的')類型:https://github.com/elixir-lang/elixir/blob/master /lib/elixir/lib/map_set.ex,但在類型檢查時,Dialyzer似乎並沒有真正使用額外的信息。 – Dogbert

回答

2
@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

警衛可用於限制給定爲函數的自變量類型的變量。

@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 
相關問題