为什么在静态解析类型参数(SRTP)表达式F#中使用“或”?

时间:2019-03-01 07:33:00

标签: f#

let inline heterogenousAddBad(value1 : ^T when ^T : (static member (+) : ^T * ^U -> ^T), value2 : ^U) = value1 + value2

let inline heterogenousAdd(value1 : ^T when (^T or ^U) : (static member (+) : ^T * ^U -> ^T), value2 : ^U) = value1 + value2

let inline heterogenousAdd2(value1 : ^T when ^U : (static member (+) : ^T * ^U -> ^T), value2 : ^U) = value1 + value2

[<EntryPoint>]
let main argv =
  let a = heterogenousAdd(5, 6) //work
  printfn "%A" a

  let b = heterogenousAddBad(5, 6) //not work
  printfn "%A" b

  let c = heterogenousAdd2(5, 6) //work
  printfn "%A" c
  0

为什么对于int,float和其他基本类型需要使用in(^ T或^ U)?用户定义的带有运算符(+)的类型可以与功能heterogenousAddBad一起使用,而基本类型则不能。 Try it

0 个答案:

没有答案
相关问题