[英]f# define generic function for multiple types and overloaded operators
我正在尝试定义一个内联 function 可以以通用方式对多种类型(包括用户定义的类型)执行算术运算。 然而,似乎内联 function 似乎过早地推断出它的类型。
我的自定义类型如下:
type ^T Foo (x: ^T) =
static member inline (*) (x: ^T, y: Foo< ^T>) = Foo x
这就是我想使用它的方式:
let foo = Foo 1
let F () = 1 * foo // works
let inline G x = 1 * x // G inferred as int -> int
let z1 = G 1 // works
let z2 = G foo // error: expected int not Foo
在保持简单的同时编写像 G 这样的通用函数的最佳方法是什么?
问题是 F# 类型推断在这里使用了弱分辨率:
let inline G x = 1 * x // G inferred as int -> int
也就是说,在存在二元运算符的情况下,它使用一个运算符是已知类型的证据来匹配具有相同类型的另一个运算符。
在存在 inline 关键字的未来版本中,此行为可能会发生变化。
目前,编写 function 的标准方法是使用通用方法:
let inline G x = LanguagePrimitives.GenericOne * x
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.