Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming Elixir:如何使自定义类型实现==,<;,及>;_Functional Programming_Elixir - Fatal编程技术网

Functional programming Elixir:如何使自定义类型实现==,<;,及>;

Functional programming Elixir:如何使自定义类型实现==,<;,及>;,functional-programming,elixir,Functional Programming,Elixir,背景:我正致力于将这个F#歧视联盟转化为长生不老药: 类型套装= |钻石 |俱乐部 |心 |黑桃 我知道有几种不同的方法可以做到这一点,这不是我的问题 必须做到以下几点: Diamonds == Diamonds Diamonds < Hearts Spades > Hearts Diamonds==钻石 钻石心 黑桃>红桃 我惊讶地发现,Elixir没有一个类似于Haskell的Ordtypeclass的协议,而GitHub上的这个协议(只有很少的星星!) 是否有一种公认的或

背景:我正致力于将这个F#歧视联盟转化为长生不老药:

类型套装=
|钻石
|俱乐部
|心
|黑桃
我知道有几种不同的方法可以做到这一点,这不是我的问题

必须做到以下几点:

Diamonds == Diamonds
Diamonds < Hearts
Spades > Hearts
Diamonds==钻石
钻石心
黑桃>红桃
我惊讶地发现,Elixir没有一个类似于Haskell的
Ord
typeclass的协议,而GitHub上的这个协议(只有很少的星星!)


是否有一种公认的或惯用的方法使自定义类型具有可比性?

实现这一点的惯用方法是在定义自定义类型的模块中简单地提供
equal?/2
和/或
compare/2
。这在核心库和健壮的第三方库中经常可以看到

例如,具有以下规范

比较(Calendar.date(),Calendar.date())::lt |:eq |:gt
v1.10.0
开始,Elixir为实现
compare/2
的结构提供了方便的排序:

defmodule用户操作
defstruct[:名称]
当n1n2时,def比较(%User{name:n1},%User{name:n2}),
do::gt
def比较(%User{},%User{}),do::eq
结束
用户=[
%用户{name:“john”},
%用户{name:“joe”},
%用户{name:“jane”}
]
sort(用户,{:asc,用户})
#⇒[%User{name:“jane”},
#%User{name:“joe”},
#%User{name:“john”}]