【问题标题】:F# Generic sum type constraintsF# 通用总和类型约束
【发布时间】:2021-07-21 07:17:13
【问题描述】:

为泛型类型编写类型约束以便我们可以将其实例传递给Array.sum 函数的正确方法是什么?

这不起作用:

let mySum< 'a when 'a : (static member get_Zero: unit -> 'a) and 'a : (static member (+) : 'a -> 'a -> 'a) > (xs: 'a[]) = Array.sum xs

我收到的上述错误消息是A type parameter is missing a constraint 'when ^a : (static member get_Zero : -&gt; ^a)'

虽然我需要一个泛型类型,而不是静态解析的类型,但我确实尝试了以下方法,但没有成功:

let mySum< ^a when ^a : (static member get_Zero: unit -> ^a) and ^a : (static member (+) : ^a -> ^a -> ^a) > (xs: ^a[]) = Array.sum xs

(我在这里再次收到相同的错误消息)。我也尝试内联函数,它也不起作用。

【问题讨论】:

    标签: generics f# type-constraints


    【解决方案1】:

    这行得通:

    let inline mySum< 'a when 'a : (static member Zero :   ^a) and 'a : (static member (+) : 'a -> 'a -> 'a) > (xs: 'a[]) = Array.sum xs
    

    但不要忘记将函数标记为内联。

    【讨论】:

    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多