Scala 强制多态参数为相同类型
在下面的方法中,我希望将函数的类型设置为 强制要求Scala 强制多态参数为相同类型,scala,polymorphism,Scala,Polymorphism,在下面的方法中,我希望将函数的类型设置为 强制要求from和to是同一类型的词典数据库。也就是说,它们必须都是天或都是小时 目前,from和to可以作为不同类型的词典数据库传递 是否可以在编译级别强制from和to始终是同一类型的词典数据库 sealed trait LexicalDate case object Day extends LexicalDate case object Hour extends LexicalDate def queryDate[Date <: Lexic
from
和to
是同一类型的词典数据库。也就是说,它们必须都是天
或都是小时
目前,from
和to
可以作为不同类型的词典数据库传递
是否可以在编译级别强制from
和to
始终是同一类型的词典数据库
sealed trait LexicalDate
case object Day extends LexicalDate
case object Hour extends LexicalDate
def queryDate[Date <: LexicalDate](
id: Long,
from: Date,
to: Date
)
密封特征词汇表
案例对象日期扩展LexicalDate
case对象扩展LexicalDate
def queryDate[Date您正在寻找的是广义类型约束=:=
,它要求编译器能够证明两种类型相等。对于您的情况,=:=
可以如下使用(特别注意queryDate
方法的隐式参数列表):
scala>def queryDate[queryDate(10,小时,天)
:15:错误:无法证明Hour.type=:=Day.type。
queryDate(10小时,一天)
^
有关通用类型约束的一般说明,请参阅以下链接:
我看不出有任何理由这样做。你唯一需要这样做的时候是,如果实现打破了(我认为)的限制,并且表现出彼此之间的巨大差异。不过这是一个有趣的想法。你的问题是什么?(顺便说一句,您对Hour
的声明应该是case-object-Hour-extensed-LexicalDate
而不仅仅是case-object-Hour-extensed
。这是您的问题吗?)这很好!一个缺点是,如果您想调用一个名为queryDate的东西,那么这种类型检查似乎只在您直接调用它时有效。