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的东西,那么这种类型检查似乎只在您直接调用它时有效。