【问题标题】:Multiple arity static type constraint多arity静态类型约束
【发布时间】:2010-11-11 14:57:19
【问题描述】:

假设我有一堆向量类型(la XNA),其中一些有静态成员Cross

type Vector3 =
  ...
  static member Cross (a : Vector3, b : Vector3) = new Vector3(...)

我可以定义cross 函数并编译:

let inline cross (x : ^T) (y : ^T) = (^T : (static member Cross : (^T * ^T) -> ^T) ((x,y)))

很遗憾,我无法使用它并出现以下错误:

let res = cross a b
                 ^

成员或对象构造函数 Cross 接受 2 个参数,但在这里给出 1. 需要的签名是静态成员 Vector3.Cross : a:Vector3 * b:Vector3 -> 向量3

这有可能吗?感谢您的帮助!

【问题讨论】:

    标签: f# type-constraints


    【解决方案1】:

    您的静态成员签名过大。试试这个:

    let inline cross (x : ^T) (y : ^T) = 
      (^T : (static member Cross : ^T * ^T -> ^T) (x,y))
    

    根据您的定义,F# 正在寻找一个成员 Cross,它接受一个元组类型的单个参数。

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      相关资源
      最近更新 更多