我正在使用 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 的 ctor 的 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 :
关于f# - 可选参数类型不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21557026/