我是一个相对较新的 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(...)
我找不到任何特别警告不要为类型别名编写伴随对象的东西,但它似乎与应该如何使用类型别名背道而驰。这也意味着所有这三个类都定义在同一个文件中,理想情况下它们应该分开。
- 这种方法有什么隐藏的问题吗?
- 这个问题有更好的设计吗?
谢谢。