Han*_*xue 13 scala tuples arity iterable-unpacking
我试图发送方法调用的元组的结果,作为另一个方法的参数列表的一部分.
目标方法
def printResult(title: String, result: Int, startTime: Long, endTime: Long)
Run Code Online (Sandbox Code Playgroud)
从方法,部分参数列表返回
def sendAndReceive(send: Array[Byte]): (Int, Long, Long)
Run Code Online (Sandbox Code Playgroud)
换句话说,我试着打电话printResult(String, (Int, Long, Long)).如果方法返回签名与方法调用匹配,那么我可以使用
(printResult _).tupled(sendAndReceive(heartbeat))
Run Code Online (Sandbox Code Playgroud)
这会导致语法错误
printresult("Hi", Function.tupled(sendAndReceive(heartbeat))
Run Code Online (Sandbox Code Playgroud)
我正在手动解压缩元组,然后在调用方法时使用它
val tuple = sendAndReceive(heartbeat)
printResult("Heartbeat only", tuple._1, tuple._2, tuple._3)
Run Code Online (Sandbox Code Playgroud)
是否有一种更优雅的方式来解压缩并将元组作为参数列表的一部分发送?
Car*_*arl 17
您可以执行以下操作:
val (result, startTime, endTime) = sendAndReceive(heartbeat)
printResult("Heartbeat only", result, startTime, endTime)
Run Code Online (Sandbox Code Playgroud)
你附上这个函数签名吗?
def printResult(title: String, result: Int, startTime: Long, endTime: Long)
Run Code Online (Sandbox Code Playgroud)
如果这是您的代码并且您可以修改它,那么您可以尝试使用柯里化来代替,如下所示:
def printResult(title: String)(result: Int, startTime: Long, endTime: Long)
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样执行它:
printResult("Curried functions!") _ tupled(sendAndReceive(heartbeat))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12768 次 |
| 最近记录: |