2

setter 是一个 getter

rvm是一个对象,而不是一个函数。

为什么约束(^b:(member ReportSubTitle:(String -> unit)) rvm )以 getter 而不是 setter 的形式出现?这是工具提示问题还是其他问题?

在我使用静态类型泛型的其他地方,我发现我什至根本不需要告诉它类型。这也不起作用:

// Setup the sub title with the total
let subTitleSetter = (^b:(member ReportSubTitle:_) rvm ) 
subTitleSetter ("Total: " + total.ToString("C") )

将此尝试移动到一个函数中并尝试了@kvb 的建议

没有括号

rvm这是封闭范围/方法中的唯一用途

4

1 回答 1

2

我不完全确定通过静态成员约束调用设置器的正确方法是什么。我总是发现该功能的边缘有点粗糙,并且在可能的情况下更喜欢使用其他选项(即定义接口并通过接口访问成员)。

也就是说,看起来您可以set_PropertyName在约束中使用。以下小示例对我来说很好:

type A() = 
  member val Foo = 0 with get, set

let a = A()
let setter v = (^b:(member set_Foo : int -> unit) (a, v) )

setter 42
a.Foo
于 2015-08-03T19:12:12.313 回答