在C#中,我可以:
var n = new Person()
{
FirstName = "John",
LastName = "Smith"
};
我能在 F# 中做同样的事情吗?我的意思是,创建一个类并指定一些属性。
是的:
let n = Person(FirstName = "John", LastName = "Smith")
需要注意的是,F# 的方法比 C# 的方法实际上更加灵活,因为可以在 任何 方法调用(不仅限于构造函数)中使用“事后”属性赋值。例如,如果 Person
类型有一个名为 CreatePerson : string -> Person
的静态方法,它创建一个新的人并分配名字,你也可以像这样使用:
let n = Person.CreatePerson("John", LastName = "Smith")
F#还具有记录,它们基本上是带有自动公开属性的类,旨在表示具有名称的简单值聚合,可选择包含成员。
type Person = {
FirstName : string;
LastName : string;
}
let p = {FirstName = "John"; LastName = "Smith"}
type Person() =
[<DefaultValue>]
val mutable firstName : string
[<DefaultValue>]
val mutable lastName : string
member x.FirstName
with get() = x.firstName
and set(v) = x.firstName <- v
member x.LastName
with get() = x.lastName
and set(v) = x.lastName <- v
let p = new Person(FirstName = "Nyi", LastName = "Than")