Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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_Type Parameter - Fatal编程技术网

Scala 以类型参数作为参数传递函数

Scala 以类型参数作为参数传递函数,scala,type-parameter,Scala,Type Parameter,我想创建一个函数g,它将函数f作为参数,其中f有一个类型参数。我无法获得编译的g的签名。一次尝试是这样的: scala> def mock1[A](): A = null.asInstanceOf[A] // STUB mock1: [A]()A scala> def mock2[A](): A = null.asInstanceOf[A] // STUB mock2: [A]()A scala> def g0(f: [A]() => A): Int = f[Int]

我想创建一个函数
g
,它将函数
f
作为参数,其中
f
有一个类型参数。我无法获得编译的
g
的签名。一次尝试是这样的:

scala> def mock1[A](): A = null.asInstanceOf[A] // STUB
mock1: [A]()A

scala> def mock2[A](): A = null.asInstanceOf[A] // STUB
mock2: [A]()A

scala> def g0(f: [A]() => A): Int = f[Int]()
<console>:1: error: identifier expected but '[' found.
       def g0(f: [A]() => A): Int = f[Int]()
                 ^
有没有一种方法可以在不引入包装器类的情况下实现这一点?

这样如何:

  def mock[A](): A = null.asInstanceOf[A]

  def g[A](f:() => A): A = f()

  g(mock[Int])
Scala(目前)不支持多态函数值。您有两个选择:

  • 坚持你的包装特点(可能最容易理解)
  • 使用来自的多态函数值(花哨,但可能有点复杂)

  • 谢谢,但是不行。我的例子过于简单化了。我需要能够在
    g
    的主体中使用不同的类型参数调用
    f
    。例如,类似于
    def g(f[A]()=>A):Boolean={f[String]()==f[Int]().toString}
      def mock[A](): A = null.asInstanceOf[A]
    
      def g[A](f:() => A): A = f()
    
      g(mock[Int])