f# - F# 是否支持模板或泛型?

标签 f#

我想实现一个堆数据结构,并希望将代码应用于任何支持比较的类型,即 < = > <= >= 操作。

如何在 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/

相关文章:

generics - F# 类型参数缺少约束

.net - 跨多个线程管理状态

F# 单元测试和模式匹配断言

visual-studio-2010 - xbuild 和 F# (vs2010) 项目

c# - 编写字符串列表的不可变 F# 映射

f# - F# 有办法打印表达式的类型吗?

f# - 与空序列匹配

f# - 如何从记录转换为元组?

f# - 如何检查 F# 中的引用相等性?

f# - 如何在函数表达式中编写 F# 事件模式匹配函数?