Scala 类型语法

Scala Type Syntax

我观察到,如果我想创建一个可以接受任何类型列表和 return 布尔值的通用函数,我可以使用以下语法进行函数声明:

def someFunction[A](l:List[A]):Boolean

但是,我也可以用这种语法实现等效的函数声明:

def someFunction(l:List[_]):Boolean

后一种语法对我来说很有意义;下划线表示任何类型列表的通配符。但是前者令人困惑;如果有的话,这两种语法之间的语义区别是什么?注意:我注意到我可以使用 [B] 或 [c] 甚至 [%] 代替第一个语法示例中的“[A]”。

A 是 "type parameter"。就像值参数一样,例如您的 l 传递参数,它是 "name" 或占位符,对于某些可能在不同时间不同的类型(即方法的不同调用) .

在你的例子中,A 没有被使用,所以,是的,使用 _ 更有意义也更清晰,但是如果你要 return 列表中的一个元素,那么方法 return 类型将是 A (或您想要为该参数指定的任何名称)。使用 _ 作为 return 类型没有任何意义。

List[_]List[X] forSome {type X <: Any} 的无约束 existential type 和 shorthand(类似于 Java 中的 List<?>)。

在这种情况下,我认为函数类型(不是 Scala 语法)forall A. List[A] -> Boolean(exists A. List[A]) -> Boolean 表示相同的东西,因为在这两种情况下你只能检查 "shape"清单的;这些类型之间可能存在等价关系。