【发布时间】:2015-08-29 13:03:52
【问题描述】:
我是一个相对较新的 Scala 用户,我想就我的代码的当前设计获得意见。
我有几个类都表示为固定长度的 Vector[Byte](最终它们用于需要字节字符串的学习算法中),例如 A、B 和 C。 为了便于阅读,我希望在包的其他地方将这些类称为 A、B 和 C,并且我不需要为这些方法向 Vector 添加任何额外的类方法。因此,我认为扩展我的库模式在这里没有用。 但是,我想包含 Vector 附带的所有有用的函数方法,而不必每次都“钻取”到包装器对象中。由于效率在这里很重要,我也不希望增加包装器的重量。
因此我决定在包对象中定义类型别名:
package object abc {
type A: Vector[Byte]
type B: Vector[Byte]
type C: Vector[Byte]
}
但是,每个都有自己的固定长度,我想包括工厂方法来创建它们。似乎这就是伴随对象的用途。这是我最终设计的样子:
package object abc {
type A: Vector[Byte]
object A {
val LENGTH: Int = ...
def apply(...): A = {
Vector.tabulate...
}
}
...
}
一切都可以编译,它允许我做这样的事情:
val a: A = A(...)
a map {...} mkString(...)
我找不到任何特别警告不要为类型别名编写伴随对象的内容,但它似乎违背了应该如何使用类型别名。这也意味着这三个类都定义在同一个文件中,理想情况下它们应该分开。
- 这种方法是否存在任何隐藏问题?
- 对于这个问题有更好的设计吗?
谢谢。
【问题讨论】:
标签: scala vector companion-object type-alias