在抽象类中使用抽象类型的全名是很常见的:
abstract class MyClass {
type MyType
}
我想知道,对于泛型类做同样的事情并不是一个好习惯:
abstract class MyClass[MyType] {
}
我所看到的只是这个:
abstract class MyClass[T] {
}
如果我必须使用泛型类并想要使用其参数的全名,那么它是否适合Scala的名称约定:
abstract class MyClass[MyGenericType] {
}
答案 0 :(得分:3)
这样做是没有错的。您经常看不到它的原因通常是参数不需要描述性名称。例如,List[T]
是List
个T
个项目。拥有它List[Item]
并没有真正添加任何内容。
另一方面,scala库中有一些地方可以看到更多描述性名称。采用map
的定义,例如:
def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That = {
在这里,我们看到Repr
和That
的名称都超过了标准的单个字母。据推测,这是因为作者认为使这些参数的使用更加清晰是有益的,因为使用map
的{{1}}的行为并不是非常清楚(并且明确不仅仅知道{{{ 1}}是CanBuildFrom
)中的项目。
当我认为它会使事情变得清晰时,我经常使用它。例如,我可能有一个课程T
,因为我认为它比List
甚至Tagger[Word,Tag]
更容易阅读。