微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将文字投影应用于精炼文字

如何解决将文字投影应用于精炼文字

考虑以下示例:

trait T3

trait T2{
  type TT4
  type TT3 <: T3
}

trait T1{
  type TT2 <: T2
}

现在我想写一个粗略的函数

def test[T <: T1](t: T#TT2{type TT4 = Int}#TT3) = println(t)  //invalid Syntax

不幸的是,这不是有效的语法。完全可以写出这样的函数

def test[T <: T1](t: T#TT2#TT3) = println(t)

但我想对 T#TT2 添加更严格的限制,使其成为精炼类型 T#TT2{ type TT4 = Int}

有什么解决办法吗?

解决方法

尝试在最终投影之前将类型 T#TT2 { type TT4 = Int } 包裹在括号中

def test[T <: T1](t: (T#TT2 { type TT4 = Int })#TT3) = ???

Types 总是可以用括号括起来

SimpleType        ::=  SimpleType TypeArgs
                      |  SimpleType ‘#’ id
                      |  StableId
                      |  Path ‘.’ ‘type’
                      |  Literal
                      |  ‘(’ Types ‘)’      <======= note the parentheses

例如

scala> val xs: (List[(Int)]) = List(42)
val xs: List[Int] = List(42)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。