1

对不起,如果这是基本的,但我仍然在 F# 周围环绕我的头。

我想做这个:

type Person(user:User) as this =
    member val Name = "" with get, set
    user.UserId <- this.Name

但这给了我错误Unexpected identifier in member definition

这编译:

type Person(user:User) as this =
    do 
       user.UserId <- this.Name
    member val Name = "" with get, set

但是InvalidOperationException在运行时给了我一个。

我已经解决了这个问题:

type Person(user:User) =
    member val Name = "" with get, set

    member this.Setup() = 
       user.UserId <- this.Name

但我不喜欢person.Setup()每次都打电话。

执行此操作的最佳 F-Sharpy 方法是什么?

4

1 回答 1

4

您可以使用显式构造函数执行此操作,以强制初始化成员函数的代码在其他代码之前运行,如下所示

type User() = 
    member val UserId = "" with get,set 
type Person private ()  =
    member val Name = "" with get, set
    new (user:User) as this =
        Person()
        then user.UserId <- this.Name

这是由于初始化程序代码在构造函数中运行,因此您必须在访问属性之前强制它运行完成

于 2013-07-16T00:18:10.740 回答