首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scala中,类型变量m forSome { m[O] <:UpperBound[O] }有简写吗?

在Scala中,类型变量m forSome { m[O] <:UpperBound[O] }有简写吗?
EN

Stack Overflow用户
提问于 2020-04-05 10:27:40
回答 1查看 109关注 0票数 1

问题:

代码语言:javascript
复制
trait UpperBound[O]
trait High[F[O] <: UpperBound[O]]

def canEqual(that :Any) = that.isInstanceOf[High[_]]

def high(h :High[_]) = ???

不编译,因为scalac看到的是_类型,而不是它所期望的类型构造函数。如何解决它,理想情况下不写小说?

最初的问题(在对Dmytro的回答进行编辑之前)有:

代码语言:javascript
复制
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不能工作,因为这类类型不匹配,而且_[_]甚至不是一个有效的类型表达式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61041172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档