gpt4 book ai didi

properties - Fsharp 记录中的可选参数

转载 作者:行者123 更新时间:2023-12-04 22:18:59 26 4
gpt4 key购买 nike

我需要为我的 F Sharp 记录修改和添加新属性。但随后它会为没有这个新字段的先前实例提供错误。我把它设置为 Nullable ,但仍然出现同样的错误,请帮我解决这个问题

最佳答案

我认为您的意思是“可选”,如“实例化记录时我不提供的字段”。但是,不幸的是(或者幸运的是,取决于您的观点),F# 记录中没有可选字段这样的东西。您指定的所有记录字段都必须在实例化时出现。

另见 this closely related question

您可以考虑这种权衡:

  • 使用 记录 。每次更新记录时,F# 编译器都会发出警告并提醒您有关使用此记录的所有位置,您现在需要提供其他信息。附加信息可以是您添加的字段的 None(如果它们是选项)。最大的优势:您的代码本身不必处理“如果 field1 丢失怎么办?如果 field2 也丢失怎么办?”的所有可能情况。
  • 使用 。当您更新类时,F# 编译器不会对您放入类中的信息强制执行任何类型的完整性检查。 (您可以将记录视为类,其中所有字段都是构造函数参数,并且必须提供所有字段)。因此,更新类定义不会导致开销,但您的代码需要处理所有缺失值。

  • 我个人更喜欢记录,因为它迫使我仔细考虑添加新字段的含义。

    当然有一个中间立场:您可以使用记录,但通过静态成员或类似的东西实例化所有记录:
    type Name = 
    {
    First: string
    Family: string
    }
    static member Create(first, family) = { First = first; Family = family}

    如果在您的代码中,您总是使用 Name.Create 来实例化记录,您当然可以添加 MiddleName 字段而不会注意到任何消费者代码。

    关于properties - Fsharp 记录中的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42968933/

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