說我們有這些嵌套類和A一個實例: class A {
case object B
case class C(c: Int)
}
val a1 = new A()
現在我可以檢查a1.B是a1.B.type實例,但我怎麼能檢查類型a1.B是的任意一個A#B.type的實例,因爲編譯器不會接受該語法。 a1.B.isInstanceOf[a1.B.type]
res: B
幾次現在我遇到了一個我認爲應該可以通過路徑依賴類型解決的問題,但我不確定我已經能夠執行所以以最完整或正確的方式。在Java世界中有一個枚舉(或者更常見的是一些靜態值形式的僞枚舉)定義了一個映射到本機類型的封閉集合,這並不罕見。 java.sql.Types就是一個很好的例子: public class Types {
/**
* <P>The constant in th
Scala n00b here。很確定我理解PDT,但是確定並且遇到問題;這裏有一個先前的問題Scala types: Class A is not equal to the T where T is: type T = A與示例代碼我將在這裏重現: 1: class Food
2: class Fish extends Food
3: class Grass extends Food
4:
我有一個聲明幾個模塊的路徑依賴特徵。沒事兒。然而,我寫了一個宏,我需要訪問這些內部類型,我無法寫出選擇它們的正確表達式。 trait A {
type Foo
object module { // one of modules encapsulating functionality
class Bar // I use it as an annotation d
考慮這個簡單的例子: class Outer {
case class Inner()
def test(i: Inner) = {}
}
正如預期的那樣,這並不因爲類型不匹配的編譯: val o1 = new Outer()
val o2 = new Outer()
o1.test(o2.Inner()) // doesn't compile
如果我們想定義一
這裏的亞型是我的方案,我想作的簡化它的工作 // the UnrelatedN are mostly used as tag traits, for type-checking purposes
trait Unrelated1
trait Unrelated2
trait HasUnrelatedSupertrait {
type Unrelated // abstract t