如何获得具有可变数量参数的int元组的乘积?

Mar*_*nic 3 generics f# constraints

type TotalSizeToken = TotalSizeToken with
    static member TotalSize(_: TotalSizeToken, (a,b,c,d,e)): int = a*b*c*d*e
    static member TotalSize(_: TotalSizeToken, (a,b,c,d)): int = a*b*c*d
    static member TotalSize(_: TotalSizeToken, (a,b,c)): int = a*b*c
    static member TotalSize(_: TotalSizeToken, (a,b)): int = a*b
    static member TotalSize(_: TotalSizeToken, x: int): int = x

let inline size_to_total_size x = 
    ((^s) : (static member TotalSize: TotalSizeToken * ^s -> int) TotalSizeToken, x)

let t = size_to_total_size (1,5) // Error: Expecting a type supporting the operator TotalSize, but given a tuple type.
Run Code Online (Sandbox Code Playgroud)

我没想到x论证size_to_total_size要求TotalSize成员.这感觉就像编译错误.

我不知道如何让它发挥作用.有任何想法吗?

Gus*_*Gus 8

你错过了另一个'帽子'类型:

let inline size_to_total_size x = 
    let call (t:^T) = ((^s or ^T) : (static member TotalSize: TotalSizeToken * ^s -> int) t, x)
    call TotalSizeToken
Run Code Online (Sandbox Code Playgroud)

必须有两个,传递的参数和表示包含重载的类的参数.

否则它将永远不会查看类,只在元组中,并且在元组类型中没有这样的方法.