2015-05-26 18 views
6

Tôi đang cố gắng thực hiện một đơn vị trả về chức năng (đây là để thực hiện một quan sát RxScala), nhưng khi tôi thêm () vào cuối nó, tôi nhận được một lỗi "Ứng dụng không tham số". Đây là mã của tôi:Cách trả lại Đơn vị từ chức năng scala?

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. 
) 

Tại sao tôi gặp lỗi này sau khi thêm () và làm cách nào để loại bỏ lỗi này? Nếu tôi bỏ nó ra tôi nhận được một lỗi nói "Loại không phù hợp: Dự kiến ​​(Throwable) => Unit, thực tế: (Throwable) => Any)".

Trả lời

0

OK vì vậy tôi đã làm việc này. Bởi vì subscribe hy vọng chức năng như các đối số của nó, tôi cần phải quấn nhiều hướng dẫn trong dấu ngoặc để thực hiện một khối mã, tức là .:

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) 
    } 
) 
+0

Tính năng này hoạt động vì bạn chỉ đang triển khai phương thức 'onNext' và' onError' trong đặc điểm 'Đăng ký'. Điều này là tốt, nếu bạn không muốn bất kỳ hành vi nào cho phương thức 'onComplete'. –

+0

Vâng tôi không cần phải làm bất cứ điều gì onComplete ngay bây giờ. Đó là một vấn đề với cú pháp. Tôi không thể làm thế nào để vượt qua các thông số một cách chính xác. – jbrown

3

Hãy thử điều này:

val client3MessageStreamObserver: Observable[Message] = client3.messageStream() 
client3MessageStreamObserver.subscribe(
    m => println("Unexpected message received by client3"), 
    t => println("Ex client3: " + t) 
() =>() 
) 

Chức năng thứ ba onCompleted là một chức năng Unit => Unit. Vì vậy, tham số là () và sau đó trong trả lại, chúng tôi có thể trả lại một cách rõ ràng () hoặc bất kỳ phương thức nào trả về một () chẳng hạn như println.

Các vấn đề liên quan