Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 可选参数类型不匹配_F# - Fatal编程技术网

F# 可选参数类型不匹配

F# 可选参数类型不匹配,f#,F#,我正在使用F#3.1,今天我两次遇到一个编译错误,我无法解释,也没有找到它 在以下代码中: 键入其他类(值:int,?标志:bool)= 成员this.DoSomething=(值,标志) 和 MyClass(值:int,?标志:bool)= 让_dummy=新的OtherClass(值、标志) 编译器说,在调用其他类的ctor的MyClass中,标志的类型不正确。具体来说,它说它想要一个bool,而不是bool选项。然而,根据我所能看到的,它被定义为bool选项 知道为什么flag被视为一个

我正在使用F#3.1,今天我两次遇到一个编译错误,我无法解释,也没有找到它

在以下代码中:

键入其他类(值:int,?标志:bool)=
成员this.DoSomething=(值,标志)
和
MyClass(值:int,?标志:bool)=
让_dummy=新的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)
引述:

调用者可以为以下可选参数指定值 方式:

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

在构造函数内部,类型是
bool选项
,但是对于构造函数的调用者,类型是
bool
,参数是可选的。这比我之前的混乱要好得多-谢谢!看来我需要重新阅读说明书。。。