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

sha*_*dzy 1 scala

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

class Element[T](func: Seq[T] => Option[Double])
Run Code Online (Sandbox Code Playgroud)

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

Dim*_*ima 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
   )
 }
Run Code Online (Sandbox Code Playgroud)

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