Merhaba,
Kendi türündeki nesnelerin bellekteki adreslerini not eden aşağıdaki gibi bir sınıf düşünün. Aslında şöyle de hayal edebilirsiniz:
IP sınıfındaki list dizisi/not ekleme mekanizması, sınıfın dışında bir yerde ve program boyunca oluşturduğunuz her IP nesnesi eğer bu liste içinde yoksa otomatik ekleniyor. Yani tekrarına izin verilmiyor ve bunu da dizi elemanlarını her seferinde aptalca is ile ile tarayarak yapıyor.
Yani siz eklemeye çalışırsanız (aşağıda bunu yaptım!) atlanıyor. Ama id'si önemsiz başka birini ekleyebilirsiniz. Çünkü is'e göre aynı değil (-bknz. if l is this
) ve açıkcası buraya kadar anlasam da ne işe yarayaleceğini bilmiyorum! 😀
import std.stdio;
class IP {
char id;
this(char c) {
id = c;
ekle();
}
static IP[] list;
void ekle() {
foreach(ref l; list) {
if(l is this) {
writeln("Tekrar eklenemez!");
goto atla;
}
}
list ~= this;
atla: return;
}
override string toString() {
return [id];
}
}
void main()
{
auto ip1 = new IP('a');
auto ip2 = new IP('b');
ip1.list.writeln;
ip1.ekle();
ip1.list.writeln;
write("ama id'si aynı başka bir sınıf, ");
auto ip3 = new IP('b');
writeln("eklendi bile!");
ip3.list.writeln;
}
/* ÇIKTISI:
[a, b]
Tekrar eklenemez!
[a, b]
ama id'si aynı başka bir sınıf, eklendi bile!
[a, b, b]
*/
Özetle, Gereksiz Bilgiler Serisi'nin sonuncusunda (GBS-8), sınıflı, statikli, etiketli, is'li saçma sapan bir şey öğrendim ve bunu paylaşmak istedim.
Başarılar...