首页 文章

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

提问于
浏览
1

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

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

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

1 回答

  • 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

相关问题