gpt4 book ai didi

f# - 可选参数类型不匹配

转载 作者:行者123 更新时间:2023-12-02 00:00:44 25 4
gpt4 key购买 nike

我正在使用 F# 3.1,今天我遇到了两次我无法解释的编译错误,而且没有找到任何运气。

在下面的代码中:

type OtherClass(value:int, ?flag:bool) =
member this.DoSomething = (value,flag)
and
MyClass(value:int, ?flag:bool) =
let _dummy = new OtherClass(value,flag)

编译器说在我调用 OtherClass 的构造函数的 MyClass 中,标志的类型不正确。具体来说,它说它想要一个 bool,而不是 bool 选项。然而,根据我所看到的,它被定义为一个 bool 选项。

知道为什么 flag 被视为常规 bool,而不是其定义的 bool 选项吗?

编辑:

经过进一步思考,我想我知道发生了什么。可选参数在方法内部被视为选项,但在外部,它们需要真实的东西。有些东西会在调用选项类型时将值换出。所以这意味着要完成我想做的事情,我们需要这样的东西

type OtherClass(value:int, ?flag:bool) =
member this.DoSomething = (value,flag)
and
MyClass(value:int, ?flag:bool) =
let _dummy =
match flag with
| None -> new OtherClass(value)
| Some(p) -> new OtherClass(value, p)

这行得通,但似乎有点冗长。有没有一种方法可以像这样将可选参数直接传递给可选参数,而无需求助于不同的调用?

最佳答案

方法如下:

type 
OtherClass(value:int, ?flag:bool) =
member this.DoSomething = (value,flag)
and
MyClass(value:int, ?flag:bool) =
let _dummy = new OtherClass(value, ?flag=flag)

引用 §8.13.6 of the spec :

Callers may specify values for optional arguments in the following ways:

  • By propagating an existing optional value by name, such as ?arg2=None or ?arg2=Some(3) or ?arg2=arg2. This can be useful when building a method that passes optional arguments on to another method.

关于f# - 可选参数类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21557026/

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