问题:
trait UpperBound[O]
trait High[F[O] <: UpperBound[O]]
def canEqual(that :Any) = that.isInstanceOf[High[_]]
def high(h :High[_]) = ???不编译,因为scalac看到的是_类型,而不是它所期望的类型构造函数。如何解决它,理想情况下不写小说?
最初的问题(在对Dmytro的回答进行编辑之前)有:
def canEqual(that :Any) = that.isInstanceOf[High[m forSome { type m[O] <: UpperBound[O] }]]
def high(h :High[m forSome { type m[O] <: UpperBound[O] }] = ???是否有一种使用通配符表达式编写上述两种方法的较短方法?简单地在_的类型参数位置上使用High不能工作,因为这类类型不匹配,而且_[_]甚至不是一个有效的类型表达式。
发布于 2020-04-05 11:02:16
High之外进行存在量化,那么它只是类型T= HighF forSome { type FO <:UpperBoundO } def canEqual(即: Any) = that.isInstanceOfT def high(h: T) =??
High内进行存在量化,则从那时起隐式(n forSome { type n <:‘s}) =:=上隐式(m[O1] forSome { type m[O] <: UpperBound[O]}) =:= UpperBound[O1]它只是High[UpperBound]
隐式[m forSome { type mO <:UpperBoundO }] def canEqual(即: Any) = that.isInstanceOf[HighUpperBound] def high(h: HighUpperBound) =?
包含子句类型[tps]>:<:的存在类型′等价于′ forSome { }类型,′是通过替换in .的每一次协变出现替换in .而产生的。
https://scala-lang.org/files/archive/spec/2.13/03-types.html#simplification-rules
https://stackoverflow.com/questions/61041172
复制相似问题