簡體   English   中英

將類型投影應用於精煉類型

[英]Apply type projection to a refined type

考慮以下示例:

trait T3

trait T2{
  type TT4
  type TT3 <: T3
}

trait T1{
  type TT2 <: T2
}

現在我想寫一個 function 大致看起來像

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

不幸的是,這不是一個有效的語法。 完全可以像這樣寫一個 function

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

但我想對T#TT2添加更嚴格的限制,使其成為精煉的類型T#TT2{ type TT4 = Int}

有什么解決方法嗎?

嘗試在最終投影之前將 type T#TT2 { type TT4 = Int }包裝在括號中,如下所示

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

類型總是可以用括號括起來

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM