可选参数类型不匹配

时间:2014-02-04 15:50:39

标签: f#

我正在使用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)

这有效,但似乎有点冗长。有没有办法将可选项直接传递给这样的可选参数,而不需要求助于不同的调用?

1 个答案:

答案 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)

引用§8.13.6 of the spec

  

调用者可以在下面指定可选参数的值   方法:

     
      
  • 通过名称传播现有可选值,例如   ?arg2 =无或?arg2 =某些(3)或?arg2 = arg2。这在以下情况下非常有用   构建一个将可选参数传递给另一个方法的方法。
  •