F# class 显式字段和默认值
F# class Explicit Fields and DefaultValue
这是一道 F# 语言定义题。
我想知道为什么 F# 不能首先自动推断出显式字段?然后 DefaultValue 也会自动...
为什么要有另一个 class 语法(在 F# 中有这么多语法)...而不是没有值(但有类型)的 let
绑定字段可以自动解释为 (的意思)val
。此外,当默认构造函数旁边需要默认值时,为什么不自动推导它呢?
let myInt1 : int
解释为以下含义:
val myInt1 : int
要么
[<DefaultValue>] val myInt : int
最后(可能是一个不同的主题,因此请将其视为一个小问题),为什么显式字段(或 public 字段)需要在成员方法中引用自标识符?同样,class 实现语法失去了很多简单性。
谢谢!
我并不声称理解所有你的问题。
显式字段自然不能从值中推断出来,因为没有值;它是未初始化的。所以你需要给一个类型。
let myInt : int
没有意义,因为 let 需要一个值。
我同意你的最后一点,val 可以很容易地在范围内并且不需要 this
限定符,但要遵守正常的隐藏规则。
很好奇您将如何强制初始化 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
定义的形式让您首先调用主构造函数并使用 then ... this.v <- ...
初始化 val mutable
这是一道 F# 语言定义题。 我想知道为什么 F# 不能首先自动推断出显式字段?然后 DefaultValue 也会自动...
为什么要有另一个 class 语法(在 F# 中有这么多语法)...而不是没有值(但有类型)的 let
绑定字段可以自动解释为 (的意思)val
。此外,当默认构造函数旁边需要默认值时,为什么不自动推导它呢?
let myInt1 : int
解释为以下含义:
val myInt1 : int
要么
[<DefaultValue>] val myInt : int
最后(可能是一个不同的主题,因此请将其视为一个小问题),为什么显式字段(或 public 字段)需要在成员方法中引用自标识符?同样,class 实现语法失去了很多简单性。
谢谢!
我并不声称理解所有你的问题。
显式字段自然不能从值中推断出来,因为没有值;它是未初始化的。所以你需要给一个类型。
let myInt : int
没有意义,因为 let 需要一个值。
我同意你的最后一点,val 可以很容易地在范围内并且不需要 this
限定符,但要遵守正常的隐藏规则。
很好奇您将如何强制初始化 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
定义的形式让您首先调用主构造函数并使用 then ... this.v <- ...
val mutable