2013-01-04 173 views
3

我正在閱讀「The D Programming Language」一書。它講述的是內在的階級。訪問外部類

class Outer{ 
    int x; 

    this(){ 
     x = 99; 
     new Inner; 
    } 

    class Inner{ 
     int x; 

     this(){ 
      x = 5; 
      writeln("Inner x = ", x, "; Outer x = ", this.outer.x); 
     } 
    } 
} 

正如本書所述,爲了能夠訪問類Outer的x,我需要使用this.outer.x。但令人困惑的是,「Outer」類的名字變成小寫「outer」。使用正常的類名「Outer」,編譯器會給出錯誤消息。這就好像編譯器決定你需要使用什麼名稱和力量來使用它生成的名稱。

我的問題是,當我將類「Outer」重命名爲「bLaH」時,現在我無法再使用外部類了。

class bLaH{ 
    int x; 

    this(){ 
     x = 99; 
     new Inner; 
    } 

    class Inner{ 
     int x; 

     this(){ 
      x = 5; 
      writeln("Inner x = ", x, "; Outer x = ", this.bLaH.x); 
     } 
    } 
} 

訪問外部類時使用什麼名字並不明顯。現在第一個字母是小寫,但編譯器說「test1.bLaH」沒有定義。 (文件名是test1.d)

如果我通過認爲可能編譯器將外部類的名稱轉換爲全部小寫字母來將「this.bLaH」轉換爲「this.blah」,這次編譯器會說「未定義的變量」胡說'。」

在這個語言中是否有設計錯誤?作爲一名程序員,我不喜歡這種由編譯器完成的名稱轉換。

我在Windows XP上,DMD版本是2.060。

回答

12

outer是一個關鍵字。這就像super或其他什麼。一個類總是嵌套在一個一個類中,所以關鍵字outer引用該類。

http://dlang.org/class.html#nested

在這裏你可以找到outer實際上是一個性質。

+0

謝謝。我繼續閱讀,在「靜態嵌套類」部分,作者突然說「神奇的屬性」,然後我就明白了。乾杯。 – tcak