将函数声明为方法签名中的参数

时间:2013-10-02 18:26:02

标签: function scala parameters

慢慢进入斯卡拉。这些都可以完成(显然不是我在这里的方式)?

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)
}

或者特定功能是否需要是特征/接口。

1 个答案:

答案 0 :(得分: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的功能可以:

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

所有这些东西都在教授中完美描述。奥德斯基的书 - Programming in Scala