gpt4 book ai didi

f# - 创建具有序列属性的 F# 类

转载 作者:行者123 更新时间:2023-12-03 09:49:28 25 4
gpt4 key购买 nike

这是代码:

type Advertisement() =
member val Photos = seq<images> with get,set

但这会返回属性照片的函数签名为
seq<images> -> seq<images>

我只希望该属性代表一系列图像
seq<images>

我错过了什么?

最佳答案

这里的问题是您想使用 seq<images>作为类型注释,但您将其用作表达式。这些有不同的含义;另外,不清楚您想分配给 Photos 的序列。 .

例如,如果要初始化 Photos对于空序列,您可以使用 Seq.empty并有 seq<images>作为类型注释:

    member val Photos = Seq.empty : seq<images> with get, set

或者,正如 ildjarn 建议的那样,为 Seq.empty<'T> 使用显式类型参数:
    member val Photos = Seq.empty<images> with get, set

Photos的类型从它在同一代码文件中的使用可以清楚地看出,编译器会推断类型,您甚至可以将其缩短为:
    member val Photos = Seq.empty with get, set

为什么原始代码返回一个函数?

当您写信时 seq<images>如果需要表达式,而不是类型(即不在 : 后面或作为类型参数),编译器将其解析为 Operators.seq<'T> ,这是签名 seq<images> -> seq<images>的函数你正在得到。
seq的实现有点奇怪;它应该表现得像 computation expression但实际上是编译器的一个特例。两者都用于转换到 seq<'T>通过您看到的函数,并表示 sequence expressions ,如 seq { yield 1 } .

关于f# - 创建具有序列属性的 F# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39486419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com