来自于 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次:
最后[A]
列表[A]
: A
(在参数列表之后)
需要第二个来指定 List
包含 A
类型的对象。需要第三个来指定该函数返回 A
类型的对象。
第一个是您实际声明 A
的位置,因此可以在其他两个位置使用它。
关于Scala:为什么函数前面需要类型变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507498/