Merhaba,
Bugün D'nin BugZilla'sı üzerinde geziniyorken çok ilginç bir örneğe rastladım:
http://d.puremagic.com/issues/show_bug.cgi?id=7609
Sanki iç içe yapı kuracağına iki yapıyı birbirine bağlamış ama bir de alias kullanmış. En iyisimi kodlar üzerinden konuşayım ve aşağıya anlamak için denediğim örneği paylaşayım:
import std.stdio;
struct DIŞ {
İÇ içteki;
alias içteki this;
}
struct İÇ {
int i;
}
struct AYNISI {
struct İÇ {
int i;
} İÇ iç;
this(int içteki) {
iç.i = içteki;
}
}
void main() {
auto aynısı = AYNISI(1);
aynısı.iç.writeln("<--İç içe yapılardan içteki(aynısı)");
auto deneme = DIŞ(İÇ(1));
deneme.içteki.writeln("<--Ayrı ayrı yapılardan içteki(deneme)");
writeln();
aynısı.iç.i.writeln("<--İç içe yapıdan aktarılan değer(iç.i)");
deneme.i.writeln("<--Ayrı ayrı yapıdan aktarılan değer(İÇ.i)");
//with (deneme) writeln(i); // fail
}
Hatanın nedeni herhalde with kümesi çinde alias kapsam dışında kalması. Sanki doğal bir sonuç ve belki de (bence öyle) hata değil ne dersiniz? Neyse, doğru veya yanlış ama böyle bir alias kullanımı çok hoş görünüyor. Gerçi Ali hocamın buradaki dersi (http://www.ddili.org/ders/d/alias.html)nde bahsetmiş ve en sona önemli bir not düşmüş:
Alıntı:
>Bir yapı veya sınıf tanımında birden fazla alias this bulunamaz.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]