Scala:如何在复杂表达式中获取元组值

时间:2015-04-12 23:05:04

标签: scala tuples

我正在分析一些用其他人编写的代码库编写的Scala代码,我正在尝试重构代码。 我想要完成的是:显示statusUpdate变量的值,并捕获其内部变量,如taskRun.filesFound。 我希望看到在使用copiedBuffer方法将ChannelUpdate varible上游传递到ChannelBuffer之前,将其传递到其他代码的上游。

因此,代码描述如下所示,在该代码中有一个方法在一个特征中定义,而该特征又被混合到另一个类中:

def sendApiUpdate(tasks:Map[String,FileTaskState]) = future{
    val statusUpdate =  MyTaskStatus(tasks.map(tuple=>
          (tuple._1, TaskStatus(
          tuple._2.task.name,
          tuple._2.taskId,
          tuple._2.task.taskState.dispName,
          tuple._2.taskRun.trawledTime,
          tuple._2.taskRun.filesDiscovered,
          tuple._2.taskRun.filesWorkedOn
        ))).toMap)
           dispatch(someUrl, ChannelBuffer.copiedBuffer(write(statusUpdate).getBytes("UTF-8")   ))
    }

其中 MyTaskStatus 是一个案例类,如下所示:

case class MyTaskStatus(taskMap:Map[String, TaskStatus]) 

任务是:

tasks: Map[String, FileTaskState]

和FileTaskState是一个案例类,如下所示:

case class FileTaskState(trawler: ActorRef, taskId: String, runId: String, taskRun) 
//there are more field values but I left them out

filesDiscovered是:

 def filesDiscovered = noFilesDiscovered.getOrElse(0L)

此外,在以下代码行中:

 tuple._2.taskRun.filesDiscovered

 taskRun is one of the fields of case class FileTaskState
 taskRun is:

 taskRun: TaskRun
 and TaskRun is a case class described as below:

 case class TaskRun( taskId: String, noFilesDiscovered)

更新

我想在tasks.map(...)中的单独变量中提取与元组关联的值。 例如,我想将tuple._2.taskRun.filesDiscovered提取到:val filesDisc =<> 目的是帮助我进行重构。

提前致谢

0 个答案:

没有答案