语法函数[T]在scala中的含义是什么

时间:2016-05-02 08:01:54

标签: scala function

我是scala的新手,想知道下面的语法意味着什么?

def exec[T](f: () => T): T = {
  f()
}

据我所知,功能" exec"期望函数作为参数并返回类型" T"的值。但那么 exec [T] 表示什么?

1 个答案:

答案 0 :(得分:6)

exec是方法名称,其中T是方法的泛型类型参数。

方法签名需要指定类型T,以便我们能够指定T作为方法的参数。

使用泛型类型参数时,您可以传递不同类型并在它们之间重复使用相同的代码,例如:

scala> exec[Int](() => 1)
res29: Int = 1

scala> exec[Double](() => 1.0)
res30: Double = 1.0

scala> exec[String](() => "hello, world")
res31: String = hello, world

当我声明exec[Int]时,参数f现在是Function0[Int]](如果我们使用语法糖,则为() => Int

正如@TzachZohar所说,Scala编译器非常智能,能够随时推断出我们的类型参数,这意味着我们可以在使用该方法时省略方括号。例如:

scala> exec(() => 1)
res32: Int = 1

scala> exec(() => 1.0)
res33: Double = 1.0

scala> exec(() => "hello, world")
res34: String = hello, world

这适用于编译器能够通过方法返回类型推断T的类型。

您可以阅读有关这些主题的更多信息:Type & polymorphism basicsGeneric ClassesLocal Type InferenceScala Specification for Local Type Inference