【问题标题】:Choice type implementation in F#F# 中的选择类型实现
【发布时间】:2021-04-27 20:52:37
【问题描述】:

我是 F# 的新手,并且在选择类型实现方面遇到了一些问题。 我有三种类型。

type A = p of string
type B = {q:string;r:int}
type C = s of string

那么我有一个这样的选择类型。

type D = A | B | C

现在我在创建 D 类型的变量时遇到问题。我正在尝试做这样的事情,

let v = {q="abc";r=12}
let vofD = D.B v

但它给出了这个错误,

这个值不是函数,不能应用

我已尝试搜索有关此内容的文档,但似乎找不到任何好的文档或解决方案。任何帮助将不胜感激。

【问题讨论】:

    标签: f# f#-3.0


    【解决方案1】:

    问题在于 F# 编译器不理解 D.B 指的是类型 B。如果您像这样定义您的受歧视工会:

    type D =
       | FromA of A
       | FromB of B
       | FromC of C
    

    那你可以写let vofD = D.FromB v

    【讨论】:

    • 或者只是类型中的“B of B”,就像我们通常做的那样。然后只需“B v”即可创建它。
    • 如果你去link,你会发现他们对地址类型做了同样的事情。它缺少的是如何分配价值,我想知道是否有一种方法可以做到这一点,而不必在每个选择中都写出来。
    • 这通常是一个很棒的网站,但我认为那个特定的例子是错误的。帕维尔·加蒂洛夫(Pavel Gatilov)甚至在底部发表了一条评论,提出了与您相同的问题。
    • @brianberns 谢谢你。我在 [fsharpforfunandprofit](github.com/swlaschin/fsharpforfunandprofit.com) 存储库上提出了一个问题。现在,我将使用与 of 的联合。
    猜你喜欢
    • 2018-08-20
    • 2015-02-12
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多