作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将闭包作为选项传递给方法,我正在执行如下所示的操作。我收到如下所示的编译错误。是否可以将可选的闭包参数传递给函数?
def sampleMethod(a: String, b: String, optionalMethod: Option[(String, Int) => Unit]) {
// do some processing with a and b
optionalMethod match {
case Some(optionalMethod) => {
optionalMethod("a",3)
}
case _
log("no optional method passed")
}
}
// definition of optMethod in some other place
val optMethod = (c: String, d: Int) => {
// some processing with c, d and external values
}
// invoke
sampleMethod("hi", "bye", optMethod) => FAILS TO COMPILE
ERROR = type mismatch. expecting Option[(String, Int) => Unit] found (String, Int) => Unit
最佳答案
错误消息非常明确:sampleMethod
期待 Option
,但您传递的是直接函数值(未包含在 Some
中)。
解决此问题的最简单方法是包装 optMethod
成Some
:
sampleMethod("hi", "bye", Some(optMethod))
sampleMethod("hi", "bye", optMethod)
,您可以添加
sampleMethod
的重载定义:
object Test {
def sampleMethod(a: String, b: String, optionalMethod: Option[(String, Int) => Unit]) {
// do some processing with a and b
optionalMethod match {
case Some(optionalMethod) => {
optionalMethod("a",3)
}
case _ => log("no optional method passed")
}
}
def sampleMethod(a: String, b: String) { sampleMethod(a, b, None) }
def sampleMethod(a: String, b: String, optionalMethod: (String, Int) => Unit) {
sampleMethod(a, b, Some(optionalMethod))
}
}
val optMethod = (c: String, d: Int) => {
// some processing with c, d and external values
}
// invoke
Test.sampleMethod("hi", "bye", optMethod) // Now Compiles fine
Test.sampleMethod("hi", "bye") // This too
关于scala - 如何将可选的闭包参数传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14775149/
我是一名优秀的程序员,十分优秀!