我在一些C#代码中有以下方法:
Qux MyFunc(Foo foo, Bar bar, int baz = 1);
Run Code Online (Sandbox Code Playgroud)
我想将它添加为我的新F#Record类型的字段.我将稍后将C#函数分配给我的记录字段,使用F#代码.
如果我忽略了最终参数baz的默认属性,那么我的类型将如下所示:
type MyType = {
MyFunc: Foo * Bar * int -> Qux
}
Run Code Online (Sandbox Code Playgroud)
但是,因为我们有可选的C#参数,所以我想反映一下.我已尝试使用此处提到的Optional属性,但它不起作用:
type MyType = {
MyFunc: Foo * Bar * [<Optional;DefaultParameterValue(null)>] int -> Qux
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过其他组合,例如问号前缀?baz.
这样做的正确方法是什么(如果可能的话)?
更新和摘要
虽然这是可能做到这一点类型成员,它是不是能够做到这一点的一个值(录音).我正在使用F#3.1,所以将来可能会这样.
为了公平地奖励积分,我将赞成@ Daniel-Fabian,他确认了这种情况,并将@ Mark-Seemann的解决方案作为答案,因为虽然这不是我想要的答案,但它解决了我的问题.问题.
您使用?for可选参数编写签名.
member this.MyFunc (foo, bar, ?baz) = Qux
Run Code Online (Sandbox Code Playgroud)
或只是签名
abstract member MyFunc : Foo * Bar * [<OptionalArgument>] baz : int option -> Qux
Run Code Online (Sandbox Code Playgroud)
同样也写在http://msdn.microsoft.com/en-us/library/dd233213.aspx中.但是,它不适用于您的情况,因为可选参数只允许键入成员而不是值.
| 归档时间: |
|
| 查看次数: |
883 次 |
| 最近记录: |