0

慢慢进入scala。可以完成其中任何一个(显然不是我在这里拥有它们的方式)吗?

def genericFunc(param1:String, param2:String, specificFunc(param2:SpecficType):[T]):[T] =
{
    val interim:SpecificType = makeSpecificType(param1,param2)
    specificFunc(interim)
}


def genericFunc(param1:String, param2:String,specificFunc(param2:SpecficType):Object):Object ={
    val interim:SpecificType = makeSpecificType(param1,param2)
    specificFunc(interim)
}

还是 specificFunc 需要是特征/接口。

4

1 回答 1

3

要将函数作为参数传递给另一个函数,您应该具有以下方法签名:

def genericFunc[T](param1:String, param2:String, specificFunc: SpecficType => T): T = ???

SpecficType => T- 是一种函数类型,这意味着它需要一个函数,该函数接受一个类型的参数SpecficType并返回一个泛型类型的值T。例子:

def fromString[A](str: String, f: String => A) = f(str)

fromString("hello", str => str.toCharArray.sum.toInt)

您可以进一步优化:

fromString("hello", _.toCharArray.sum.toInt)

在这种情况下fromString是一个高阶函数。HOF 是可以:

  • 将另一个函数作为参数
  • 返回一个函数

所有这些东西都在教授中得到了完美的描述。Odersky 书籍 - Scala 编程

于 2013-10-02T18:40:39.530 回答