0
在一个Scala类中,目标是实现一个Builder模式,并且构造类的参数之一是一个函数,它接收一个元组并且返回一个Double。在Scala中,如何使用元组参数定义一个函数变量
在Builder类中,变量tupleFunc
需要用默认实现来保存此类型的函数。 Builder还会有一个方法tupleFuncIs
覆盖默认值。
class FunctionProblem private (val tupleFunc: (Boolean, Double, Int) => Double,
val func: Double => Double) {
}
object FunctionProblem {
class Builder {
// problem line follows
private var tupleFunc: ((Boolean, Double, Int) => Double) = (x: (Boolean, Double, Int)) => if (x._1) x._2 else x._3.toDouble
private var func: (Double => Double) = (x: Double) => 0.75 * x
def tupleFuncIs(x: (Boolean, Double, Int) => Double): Builder = { tupleFunc = x; this }
def funcIs(x: Double => Double): Builder = { func = x; this }
def build(): FunctionProblem = new FunctionProblem(tupleFunc, func)
}
def builder(): Builder = new Builder
}
然而,Scala编译器抱怨类型不匹配的
[ant:scalac] found : ((Boolean, Double, Int)) => Double
[ant:scalac] required: (Boolean, Double, Int) => Double
[ant:scalac] private var tupleFunc: ((Boolean, Double, Int) => Double) = (x: (Boolean, Double, Int)) => if (x._1) x._2 else x._3.toDouble
[ant:scalac] ^
为什么有发现,双括号或更好,但应该如何tupleFunc
被改写,以满足编译器?