2017-01-02 148 views
0

其实,我写了一个scala脚本,它正在根据某个参数对函数进行排序。看下面的代码片段:如何重构scala代码?

object TestTypes { 
    type SortFn = ((String, TestMetricFields)) => Double 
    case class TestMetricFields(maths: Int, science: Int) 
} 

trait TestMarks { 
    def sName: String 
    def getSortFun(): SortFn 
} 

object TestMarkStudent extends TestMarks { 
    override def sName: String= "xxx" 
    override def getSortFun(): SortFn = { 
     input: (String, TestMetricFields) => input._2.maths + input._2.science 
    } 
} 

这里我想避免在上面的代码中使用._2。如何重写Scala代码?

我试过以下,但我失败了。

override def getSortFun(): (String, TestMetricFields) => SortFn = { 
    (sName: String, testField: TestMetricFields) => { 
     input: (String, TestMetricFields) => 1.0 * testField.maths + testField.science 
    } 
} 

谁能帮我重构代码,而无需使用._2

+0

你有什么要避免使用'_2'? – Todd

回答

2

你可以写这样的:

override def getSortFun(): SortFn = { case(_, fields) => 
    fields.maths + fields.science 
} 
+0

谢谢,它对我来说工作得很好。 – sk1007