如何从scala函数返回Unit?

jbr*_*own 7 scala

我正在尝试创建一个函数返回单元(这是为了实现一个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)

添加后为什么会出现此错误()?如何摆脱它?如果我把它遗漏,我会收到一个错误,上面写着"类型不匹配:预期(可投掷)=>单位,实际:(可投掷)=>任何)".

gor*_*lph 5

尝试这个:

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


jbr*_*own 0

好的,我解决了这个问题。因为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)