我有一个类,它将函数作为变量:
class Element[T](func: Seq[T] => Option[Double])
我想要另一个构造函数:def this(func: Seq[T] => Double)
。如何在不知道函数是什么的情况下从Seq[T] => Option[Double]
创建Seq[T] => Double
?
答案 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
)
}
这使得第二个构造函数的调用序列形式上有所不同,因此即使第一个参数类型与第一个参数类型相同,您仍然可以使用它。