这是一个F#语言定义问题。 我想知道为什么F#首先不能自动推断显式字段?然后自动DefaultValue ......
为什么有另一个类语法(在F#中有这么多个)...而是一个没有值(但带有类型)的let
绑定字段可以自动解释为(含义){{ 1}}。此外,当默认构造函数需要DefaultValue时,为什么不自动推导它?
val
解释为:
let myInt1 : int
要么
val myInt1 : int
最后(可能是一个不同的主题,因此请将其视为次要查询),为什么显式字段(或公共字段)需要成员方法中的自我标识符引用?同样,类实现语法失去了很多简单性。
谢谢!
答案 0 :(得分:0)
我并不声称理解您问题的所有。
显然字段当然不能从值中推断出来,因为没有值;它没有被初始化。所以你需要提供一种类型。
let myInt : int
没有意义,因为我们需要一个价值。
我最后一点同意你的意见,val可以很容易地在范围内而且不需要this
限定符,这取决于正常的阴影规则。
答案 1 :(得分:0)
很好奇您将如何强制初始化val mutable
字段:
type MyClass private () =
[<DefaultValue>] val mutable v:int
new (v:int) as this = MyClass() then this.v <- v
这将主要构造函数设为私有,因此必须使用new (v:int)
。通过new (v:int) as this
定义的形式,您可以首先调用主构造函数并使用val mutable
then ... this.v <- ...