我正在阅读"D编程语言"一书.它讲的是内部阶级.
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 );
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如本书所说,为了能够访问类Outer的x,我需要使用this.outer.x.但令人困惑的是,"外"类的名称变成小写"外".使用正常的类名"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 );
}
}
}
Run Code Online (Sandbox Code Playgroud)
访问外部类时使用的名称并不明显.第一个字母现在是小写,但编译器说"test1.bLaH"没有定义.(文件名是test1.d)
如果我将"this.bLaH"转换为"this.blah",可能认为编译器可能会将外部类的名称转换为全部小写,这次,编译器会说"未定义变量'blah'".
关于这个语言是否存在设计错误?作为程序员,我不喜欢编译器完成的这种类型的名称转换.
我在Windows XP上,DMD版本是2.060.
pha*_*zon 12
outer是一个关键字.它就像super或者其他什么.类始终只嵌套在一个类中,因此outer关键字引用该类.
http://dlang.org/class.html#nested
在这里你可以发现它outer实际上是一个属性.