我是scala的新手,想知道下面的语法意味着什么?
def exec[T](f: () => T): T = {
f()
}
据我所知,功能" exec"期望函数作为参数并返回类型" T"的值。但那么 exec [T] 表示什么?
答案 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 basics,Generic Classes,Local Type Inference和Scala Specification for Local Type Inference