我希望能够从部分应用的函数组成函数。 IE。像这样的:
def average(data: Seq[Option[Double]]): Option[Double] = {
val numbers = data.flatten
numbers match {
case ns if ns.length == 0 => None
case ns => Some(ns.sum / ns.length)
}
}
def roundHalfUp(d: Double, rounding: Int): Double = {
BigDecimal.apply(d).setScale(rounding, BigDecimal.RoundingMode.HALF_UP).doubleValue
}
def round(rounding: Int, number: Option[Double]): Option[Double] = {
number match {
case None => None
case Some(n) => Some(roundHalfUp(n, rounding))
}
}
val f = average andThen round(2)
f(List(1.23, 2.242, 3.345))
但是我无法让组合函数的分配起作用。我很高兴强制执行我需要参数占位符的函数,即
val f = average(_) andThen round(2,_)
但无论我尝试什么语法都不起作用。
任何人都可以建议正确的语法或替代方法。这应该是简单设计特定语言的功能,所以越简单越好。
我成功了!我需要将方法提升为函数(使用参数 _):
val r = round(2) _
val a = average _
val f = a andThen r
f(List(1.23, 2.242, 3.345))
或者,没有中间变量,
val f = (average _) andThen (round(2) _)