我正在使用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)
编译器说我在我的MyClass中调用了OtherClass的ctor,标志的类型是不正确的。具体来说,它说它想要一个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)
这有效,但似乎有点冗长。有没有办法将可选项直接传递给这样的可选参数,而不需要求助于不同的调用?
答案 0 :(得分:3)
以下是执行此操作的方法:
type
OtherClass(value:int, ?flag:bool) =
member this.DoSomething = (value,flag)
and
MyClass(value:int, ?flag:bool) =
let _dummy = new OtherClass(value, ?flag=flag)
调用者可以在下面指定可选参数的值 方法:
- 通过名称传播现有可选值,例如 ?arg2 =无或?arg2 =某些(3)或?arg2 = arg2。这在以下情况下非常有用 构建一个将可选参数传递给另一个方法的方法。