我想实现一个堆数据结构,并希望将代码应用于任何支持比较的类型,即 < = > <= >= 操作。
如何在 F# 中执行此操作,因为它是静态类型的。
最佳答案
确实如此,但您必须注释如下:
type Thing<'a when 'a:comparison> =
| Pair of ('a*'a)
with
member m.InOrder() =
match m with
| Pair (a,b) when a<=b -> true
| _ -> false
member m.Equal() =
match m with
| Pair (a,b) when a=b -> true
| _ -> false
Pair(1,2).InOrder() //true
Pair(3,2).InOrder() //false
Pair(42,42).Equal() //true
尝试更换
Thing<'a when 'a:comparison>
来自 Thing<'a when 'a:equality>
观看 InOrder()
方法失败,而 Equal()
仍然有效。替换 Thing<'a when 'a:comparison>
来自 Thing<'a>
并且这两种方法都行不通。
关于f# - F# 是否支持模板或泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2020114/