2017-05-23 11 views
0

私は、キーバリューストアとして機能するエリキシルのバランス検索ツリーを実装しています。ジェネリック医薬品の型指定方法

私はメソッドfrom_listを持っています。このメソッドは、キー値タプルのリストを取得し、ツリーを返します。強く型付けされた言語でこれを行うように型指定するためにジェネリックスを使用する方法はありますか?

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

これを試すとエラーが発生します。エリクサーにジェネリック薬はありますか?あるいは、それを{any、any}タイプのリストにしなければならないのですか? https://hexdocs.pm/elixir/typespecs.htmlから

+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 

ガード関数の引数として与えられた型の変数を制限するために使用することができます。

@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 
関連する問題