Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:如何在函数变量上应用函数?_Scala - Fatal编程技术网

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

Scala:如何在函数变量上应用函数?,scala,Scala,我有一个类,它将函数作为变量: class Element[T](func: Seq[T] => Option[Double]) 我想要另一个构造函数:def this(func:Seq[T]=>Double)。如何在不知道函数是什么的情况下,用Seq[T]=>Double创建Seq[T]=>Option[Double]选项[Double]很容易。 只需执行func和第二个选项。应用 问题是,当主构造函数是Seq[t]=>选项[Double]时,您不能使用def这个(f:Seq[t]=>

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

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

我想要另一个构造函数:
def this(func:Seq[T]=>Double)
。如何在不知道函数是什么的情况下,用
Seq[T]=>Double
创建
Seq[T]=>Option[Double]
选项[Double]很容易。 只需执行
func和第二个选项。应用

问题是,当主构造函数是
Seq[t]=>选项[Double]
时,您不能使用
def这个(f:Seq[t]=>Double)
。这些是相同的签名。使用
dummyImplicit
是一个巧妙的解决方法:

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

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

很容易将
Seq[T]=>选项[Double]
设置为
Seq[T]=>Double
。 只需执行
func和第二个选项。应用

问题是,当主构造函数是
Seq[t]=>选项[Double]
时,您不能使用
def这个(f:Seq[t]=>Double)
。这些是相同的签名。使用
dummyImplicit
是一个巧妙的解决方法:

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

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

Ok,但是否仍有方法进行我正在寻找的转换?Ok,但是否仍有方法进行我正在寻找的转换?