2015-05-26 17 views
6

Bir işlev döndürme birimi oluşturmaya çalışıyorum (bu bir RxScala gözlemcisini uygulamaktır), ancak sonuna () eklediğimde, "Uygulama parametreler almıyor" hatası alıyorum. İşte benim kod:Birim bir scala işlevinden nasıl geri dönülür?

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

Neden () ekledikten sonra bu hatayı alıyorum ve nasıl ondan kurtulmak edebilir mi? Eğer onu dışarı çıkarırsam, "Tip uyuşmazlığı: Beklenen (Throwable) => Birim, gerçek: (Atılabilir) => Herhangi biri" diyen bir hata alıyorum.

cevap

0

Tamam, bu yüzden çalıştım. subscribe 's argümanlar gibi işlevleri bekler çünkü ben bir kod bloğu yapmak için ayraç birden talimatları sarmak için gerekli, yani .:

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

Bu, "Abone Ol" özelliğindeki 'onNext' ve' onError' yöntemlerini uyguladığınız için çalışır. 'OnComplete' yöntemi için herhangi bir davranış istemiyorsanız, bu iyidir. –

+0

Evet, şu anda tamamında bir şey yapmam gerekmiyor. Sözdizimi ile ilgili bir sorun daha vardı. Parametreleri doğru bir şekilde nasıl geçeceğimi bilemedim. – jbrown

3

bu deneyin:

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

üçüncü fonksiyon onCompleted bir işlev Unit => Unit olduğunu. Yani, parametre ()'dur ve dönüşte ()'u veya 'u println gibi döndüren herhangi bir yöntemi açıkça iade edebiliriz.

İlgili konular