scala - 语法function[T]在scala中是什么意思

标签 scala function

我是 Scala 的新手,想知道下面的语法是什么意思?

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

据我所知,函数“exec”期望函数作为参数并返回“T”类型的值,但是执行[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 的类型通过方法返回类型。

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

关于scala - 语法function[T]在scala中是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36977738/

相关文章:

scala - scala 的图形库

java - Vert.x Web(Scala): Read Multipart File Upload as Stream from Router without Saving to Disk

python - PyCharm 警告局部变量可能被引用

c - 函数返回可选值

java - 使用前瞻表达式匹配组

scala - 为什么 Scala 特征不允许构造函数参数?

java - 有没有办法从 Java 改进 Scala 中的 for 循环实现

javascript - 如何在两个不同事件的同一 HTML 控件(文本字段)上调用两个不同的 javascript/jquery 函数?

javascript - 立即调用的简单 JavaScript 函数不起作用……为什么?

c++ - 编写用于排列数组中元素的函数