我是scala的新手,想知道以下语法的含义是什么?
def exec[T](f: () => T): T = {
f()
}
据我了解,函数“ exec”期望函数作为参数并返回类型“ T”的值,但是exec [T]表示什么呢?
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
通过方法的返回类型来推断类型,因此可以使用此方法。
您可以阅读以下主题的更多信息:类型和多态性基础知识,泛型类,局部类型推断和局部类型推断的Scala规范
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句