Rx Kotlin:map函数不能推断返回类型

在连接到蓝牙设备的应用程序中,我正在使用下面的函数使用RxKotlin:

private fun startBluetoothPair(device: BluetoothDevice) { Observable.just(device) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .map { var uuid: UUID = BLUETOOTH_UUID var socket = it.createRfcommSocketToServiceRecord(uuid) socket.connect() return socket } .subscribe { // Do something with the BluetoothSocket } } 

这个函数应该简单地连接到背景上的蓝牙设备,然后用套接字(再次在mainthread中)做一些事情。 然而, map无法处理return socket部分,告诉我有一个Type mismatch ,它发现一个BluetoothSocket它需要一个Unit

这里怎么了? 我认为地图应该能够推断返回类型。

在你的map函数中替换语句

 return socket 

 return@map socket 

因为return语句通常用于返回顶级函数的值。 对于lambda表达式和内联(嵌套)函数,请在标签处使用返回值,即return @ {method_name} 。 你也可以把最后一行留给socket ,编译器会为你处理,假定最后一行是内联函数的返回值。 但为了更好的可读性,我一定会喜欢合格的返回语法。 您可以在这里和这里阅读kotlin文档中的更多细节