作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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 的构造函数的 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 :
Callers may specify values for optional arguments in the following ways:
- By propagating an existing optional value by name, such as ?arg2=None or ?arg2=Some(3) or ?arg2=arg2. This can be useful when building a method that passes optional arguments on to another method.
关于f# - 可选参数类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21557026/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!