我正在尝试创建一个函数返回单元(这是为了实现一个RxScala观察者),但是当我添加()到它的末尾时,我得到一个错误"应用程序不接受参数".这是我的代码:
val client3MessageStreamObserver: Observable[Message] = client3.messageStream()
client3MessageStreamObserver.subscribe(
m => println("Unexpected message received by client3"),
// callback for handling exceptions
t =>
println("Ex client3: " + t)
// want to make this line work (which it doesn't) which is why
// I need to be able to return Unit.
// client3TestPromise.success(true)
() // error after adding Unit literal here.
)
Run Code Online (Sandbox Code Playgroud)
添加后为什么会出现此错误()?如何摆脱它?如果我把它遗漏,我会收到一个错误,上面写着"类型不匹配:预期(可投掷)=>单位,实际:(可投掷)=>任何)".
尝试这个:
val client3MessageStreamObserver: Observable[Message] = client3.messageStream()
client3MessageStreamObserver.subscribe(
m => println("Unexpected message received by client3"),
t => println("Ex client3: " + t)
() => ()
)
Run Code Online (Sandbox Code Playgroud)
第三个功能onCompleted是一个功能Unit => Unit。因此,参数为(),然后在返回中我们可以显式返回()或任何返回()诸如的方法println。
好的,我解决了这个问题。因为subscribe需要函数作为参数,所以我需要将多个指令括在大括号中以创建代码块,即:
val client3MessageStreamObserver: Observable[Message] = client3.messageStream()
client3MessageStreamObserver.subscribe(
// single instruction function doesn't require braces
m => client3TestPromise.failure(new RuntimeException("Unexpected " +
"message received by client3")),
// multi-instruction function does require braces
t => {
println("Ex client3: " + t)
client3TestPromise.success(true)
}
)
Run Code Online (Sandbox Code Playgroud)