Зачем использовать «или» в выражениях статических параметров типа (SRTP) F #? - PullRequest
0 голосов
/ 01 марта 2019
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

Зачем использовать или в (^ T или ^ U) для базовых типов, таких как int, float и другие?Пользовательские типы с оператором (+) работают с функцией heterogenousAddBad, но базовые типы - нет. Попробуйте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...