F#成员一个内部函数,仅在首次调用时评估

时间:2019-04-26 11:16:02

标签: class f# litedb

我正在尝试对{#1}这样的F#中的类使用某种聚合。您可以看到我已经将其设计为调用内部函数member this.FullName with get() = fullName()的成员,并且似乎该值是在第一次调用时求值并在内部存储的。 如果我修改组成函数的值,它将继续返回第一次调用的值。我该如何更改?

如果同时更新LiteDB中的Object并再次读取它(如果看来),或者值已更新。

和其他问题: LiteDB中存储的成员和内部变量是什么。大家? 。我该如何控制它?

完整代码为:

let fullName() = (string Id) +" "+ Name

2 个答案:

答案 0 :(得分:3)

您已经写了let fullName = (string Id) + " " + NamefullName之后没有参数,因此它不是一个函数(每次调用时都会被评估),而是一个值(只被评估一次)。如果希望每次调用它都对其求值,请通过添加一个参数将其转换为函数:

let fullName () = (string Id) + " " + Name

答案 1 :(得分:0)

像这样解决

type Article( Id: int, Name: string) as self =
    let fullName()  = (string self.Id) + " " + self.Name
    ...
    member this.FullName with get() = fullName()

添加self作为解决方案