如何在F#中创建一个类实例并填充属性?

3

在C#中,我可以:

var n = new Person()
{
     FirstName = "John",
     LastName = "Smith"
};

我能在 F# 中做同样的事情吗?我的意思是,创建一个类并指定一些属性。


1
可能是F#对象初始化语法的重复。 - Mauricio Scheffer
3个回答

15

是的:

let n = Person(FirstName = "John", LastName = "Smith")

需要注意的是,F# 的方法比 C# 的方法实际上更加灵活,因为可以在 任何 方法调用(不仅限于构造函数)中使用“事后”属性赋值。例如,如果 Person 类型有一个名为 CreatePerson : string -> Person 的静态方法,它创建一个新的人并分配名字,你也可以像这样使用:

let n = Person.CreatePerson("John", LastName = "Smith")

MSDN文档中是否涵盖了方法调用和属性赋值? - Daniel
@Daniel - 简短的搜索没有发现什么。但是它在方法应用程序解析部分的规范中被深埋着:http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc270597639。 - kvb
我以前读过这个,但从未使用过,所以我完全忘记了它。谢谢你提醒我! - Robert Jeppesen

4

F#还具有记录,它们基本上是带有自动公开属性的类,旨在表示具有名称的简单值聚合,可选择包含成员。

type Person = {
    FirstName : string;
    LastName : string;
}

let p = {FirstName = "John"; LastName = "Smith"}

2
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")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接