一类泛型类的完全可理解的名称

时间:2013-12-15 05:17:33

标签: scala

在抽象类中使用抽象类型的全名是很常见的:

abstract class MyClass {
  type MyType
}

我想知道,对于泛型类做同样的事情并不是一个好习惯:

abstract class MyClass[MyType] {

}

我所看到的只是这个:

abstract class MyClass[T] {

}

如果我必须使用泛型类并想要使用其参数的全名,那么它是否适合Scala的名称约定:

abstract class MyClass[MyGenericType] {

}

1 个答案:

答案 0 :(得分:3)

这样做是没有错的。您经常看不到它的原因通常是参数不需要描述性名称。例如,List[T]ListT个项目。拥有它List[Item]并没有真正添加任何内容。

另一方面,scala库中有一些地方可以看到更多描述性名称。采用map的定义,例如:

def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That = {

在这里,我们看到ReprThat的名称都超过了标准的单个字母。据推测,这是因为作者认为使这些参数的使用更加清晰是有益的,因为使用map的{​​{1}}的行为并不是非常清楚(并且明确不仅仅知道{{{ 1}}是CanBuildFrom)中的项目。

当我认为它会使事情变得清晰时,我经常使用它。例如,我可能有一个课程T,因为我认为它比List甚至Tagger[Word,Tag]更容易阅读。