我正在分析一些用其他人编写的代码库编写的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 =<> 目的是帮助我进行重构。
提前致谢