这是我的代码,当我尝试调用m1方法时出现以下错误:
trait Function4[-T1, -T2, -T3, -T4, +R] extends Function {
def apply(arg1: T1, arg2: T2, arg3: T3, arg4: T4): R
}
class Function(args: String*) extends Object {
}
class A extends Object {
type CallbackFunction = Function4[Object, Object, Object, Object, Promise[String]]
def m1(callback: CallbackFunction): Unit = {
}
def m2 = {
m1(
(a:Object, b:Object, c:Object, d: Object) => {
println("good here!")
}
)
}
}
错误是: 类型不匹配,预期:A.this.CallbackFunction,actual:(Object,Object,Object,Object)=>无极[字符串]
答案 0 :(得分:0)
实际上你的原始代码(修订版1)在Scala 2.12中运行正常,在Scala 2.11中不起作用。
如果您希望在Scala 2.11中编写代码,可以像这样重写代码:
class A extends Object {
type CallbackFunction[A] = Function4[Object, Object, Object, Object, A]
def m1[A](callback: CallbackFunction[A]): Unit = {
}
def m2 = {
m1(
(a:Object, b:Object, c:Object, d: Object) => {
println("good here!")
}
)
}
}
或者将Function4[Object, Object, Object, Object, _]
更改为Function4[Object, Object, Object, Object, Unit]
。
如果您希望当前代码(修订版2)有效,则只需将Promise[String]
更改为Unit
。
答案 1 :(得分:0)
为什么您的代码定义了您自己的Function
(不描述函数)和您自己的Function4
(当标准库中有一个时)?
如果你对另一个答案的评论说:“我无法改变我的CallbackFunction中的任何内容,这是一个库代码”,这看起来就像一个没有人应该使用的库。
但是,直接回答您的问题是您传递给m1
的参数必须是返回Promise[String]
的函数。假设Promise
是标准scala.concurrent.Promise
而不是库定义的另一种类型,一种可能性是
(a:Object, b:Object, c:Object, d: Object) => Promise()
但那只会让它编译(所以会传递null
!);完全不清楚你想要做什么。