Scala:为什么函数前面需要类型变量?

标签 scala type-variables

来自于 first problem of the 99 Scala Puzzles 的工作我定义了我自己的 last 版本,如下所示:

def last[A](xs: List[A]): A = xs match {
  case x :: Nil => x
  case x :: xs => last(xs)
}

我的问题是:为什么 last 后面必须直接跟上类型变量,如 last[A] 中那样?如果我像这样编写函数,为什么编译器不能做正确的事情:

def last(xs: List[A]): A
    .....

(将 [A] 留在 last[A] 的末尾?)

如果编译器能够计算出它,那么以这种方式设计语言的理由是什么?

最佳答案

A出现3次:

  1. 最后[A]

  2. 列表[A]

  3. : A(在参数列表之后)

需要第二个来指定 List 包含 A 类型的对象。需要第三个来指定该函数返回 A 类型的对象。

第一个是您实际声明 A 的位置,因此可以在其他两个位置使用它。

关于Scala:为什么函数前面需要类型变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507498/

相关文章:

haskell - 如何指定内联类型中使用的类型变量,是否与函数定义中使用的类型变量相同?

generics - Kotlin泛型和TypeVariable

scala 2.10.2 调用具有泛型类型的 'macro method' 不起作用

java - 设置 Gatling 以根据百分比/比率发送请求?

unit-testing - 在 play 2.0 scala 中在同一个 FakeApplication() 中运行多个测试

haskell - 如何正确绑定(bind)此类型变量?

generics - 为什么编译器会将两个具有不同名称的等效签名的泛型类型变量识别为不同类型?

haskell - haskell中多个类型变量的顺序规则是什么?

scala - Scala类参数化中附加冒号的含义

scala - 如何使用 Spark/scala 解析 YAML