f# - 为什么这个带有成员约束的 F# 代码不能编译?

标签 f# constraints member

对我来说,似乎编译器具有该点的所有信息,但我收到错误消息。为什么?

let inline getLength< ^a when ^a : (member Length : int ) > (x: ^a) = x.Length

最佳答案

要调用静态约束所需的成员,您需要使用更复杂的语法:

let inline getLength< ^a when ^a : (member Length : int ) > (x: ^a) = 
  (^a : (member Length : int) x)

这有点难看 - 我认为这强调了静态成员约束不是实现事物的主要方式(通常,您可以使用例如接口(interface)或其他更常用的技术)。

此外,如果您主要对数学代码感兴趣,那么您可以只使用标准运算符和函数(连同 LanguagePrimitives 中的一些原语),而不必显式调用成员。

关于f# - 为什么这个带有成员约束的 F# 代码不能编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22020803/

相关文章:

c# - Microsoft Solver foundation 与 Matlab fmincon 中的约束非线性优化

.net - 显式类型成员约束中的 "or"

sql - 无法删除 SQL Server 2005 中的约束, "Could not drop constraint. See previous errors"

MySQL 外键约束混淆

c# - C# 中的泛型类成员?

struct - 如何在 scala native 中按名称访问结构成员?

silverlight - 添加图像 F#

f# - 为什么这个定义返回一个函数?

sql - postgresql:错误重复键值违反唯一约束

C++判断成员函数指针模板常量的类型