generics - F#:运算符绑定(bind)中的显式类型参数

标签 generics f# operators explicit type-parameter

我正在尝试使用显式类型参数和约束来定义运算符:

let inline (===)<'a, 'b
    when 'a : not struct
     and 'b : not struct> a b = obj.ReferenceEquals (a,b)

它在 F# 2.0 中运行良好,但会产生:

warning FS1189:
Type parameters must be placed directly adjacent to the type name, e.g. "type C<'T>", not type "C <'T>"



那么,为运算符定义做显式类型参数规范的正确方法是什么?

p.s.请不要告诉我隐式类型参数和其他一些解决方法,我想具体解决这个问题。

最佳答案

编译器中的错误意味着符号运算符永远不会被视为与类型参数直接相邻。您可以通过例如解决方法

let inline myeq<'a, 'b 
    when 'a : not struct 
    and 'b : not struct> a b = obj.ReferenceEquals (a,b) 

let inline (===) a b = myeq a b

关于generics - F#:运算符绑定(bind)中的显式类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3501616/

相关文章:

c# - 将通用集合转换为字符串列表

generics - 如何从 RefCell<T> 中借用 T 作为引用?

Java 嵌套泛型

java - 为什么 List<String> 不能作为 List<Object> 接受?

regex - 这个正则表达式有什么问题? (使用 '.' )

f# - 何时评估模块中的 F# `do` 语句?

parsing - 如何捕获没有引号字符的字符串

bash - 在 if 语句中使用 && 运算符

swift - &/and &% 从 Swift 语言中移除了吗?

java - 这 ? (三路)运算符(operator)