Scala:如何在函数变量上应用函数?

时间:2018-02-09 01:40:04

标签: scala

我有一个类,它将函数作为变量:

class Element[T](func: Seq[T] => Option[Double])

我想要另一个构造函数:def this(func: Seq[T] => Double)。如何在不知道函数是什么的情况下从Seq[T] => Option[Double]创建Seq[T] => Double

1 个答案:

答案 0 :(得分:5)

Seq[T] => Option[Double]中轻松制作Seq[T] => Double。 只需func andThen Option.apply

问题是,当您的主构造函数为def this(f: Seq[T] => Double)时,您无法拥有Seq[T] => Option[Double]。这些是相同的签名。解决这个问题的一个巧妙方法就是使用dummyImplicit

 class Foo[T](f: Seq[T] => Option[Double]) {
   def this(f: Seq[T] => Double)(implicit dummy: DummyImplicit) = this(
      f andThen Option.apply
   )
 }

这使得第二个构造函数的调用序列形式上有所不同,因此即使第一个参数类型与第一个参数类型相同,您仍然可以使用它。