【发布时间】:2015-01-26 20:37:02
【问题描述】:
我想将类型 [R] 限制为仅在某处列出的特定元组。我的主要目标是:确保编译器在将任何其他元组而不是预期的元组传递给以下特征时引发错误。
trait QV_Storable[R <: QV_Cue] {
val prefix: String
val tableName = prefix.concat(Random.alphanumeric take 8 mkString)
def Make(rows: Iterable[R.storageColumns]): String
}
那么我确实希望QV_Storable 只接受SegmentCue 中列出的元组,因为它是QV_Cue 的子组。请注意我将R.storageColumns 传递给Make(rows: Iterable[R.storageColumns])。因此,我确实希望有一种访问类类型参数的方法。
trait QV_Cue{
type storageColumns <: Product
type metaColumns <: Product
}
object SegmentCue extends QV_Cue {
type storageCols = (CoreDataID, String)
type metaCols = (Int, String, Date, Int)
}
有没有办法限制它? 从 Tuple1、Tuple3 等进行子类型化不是很好。
【问题讨论】:
-
您能解释一下您的用例吗?不清楚(对我来说,无论如何)你在问什么。
-
@Paul trait QV_Storable 必须只接受特定类型的元组。例如 (Int, String) 或 (Int, Int, Int)。如果我要限制类型 [R <: product>
-
这不是您的用例,只是再次提出的问题。但也许只有我无法立即看到你想要这个的原因。
-
@Paul,在我的情况下,我想确保通过 trait 的所有值都可以插入到特定表或具有传统数据结构的存储中。