Merhaba,
Daha önce hiç denememiştim, ta ki yabancı forumda şu iletiyle karşılaşıncaya kadar. Bildiğiniz ilişkisel (çağrışımsal) diziyi basit bir yapıyla sarmaladığınızda çok güçlü bir arkadaş çıkıyor:
struct LookUp(T)
{
T*[string] data;
auto set(string key, ref T value)
=> data[key] = &value;
auto opIndex(string key)
=> key in data ? *data[key] : T.init;
auto opSlice()
=> data.keys;
}
Aslında bu D'nin gücünü gösteriyor! Nasıl olur da bu dil yaygınlaşmaz diye hayıflanıyor insan. Buyrun şu aşağıdaki kodla deneyin ve gücü hissedin!
import std.stdio;
void main()
{
struct S { string data; }
auto foo = S("foo");
auto bar = S("bar");
LookUp!S table;
table.set("foo", foo);
assert(table["foo"] == foo);
table["foo"].writeln;
table.set("bar", bar);
assert(table["bar"] == bar);
table["bar"].writeln;
table[].writeln;
writeln([&foo, &bar]);
table.writeln;
}
Dip Not: Bir de bunun karmaşığı, Voldemort tipi var ama şimdi çok fazla kafa karıştırmayayım dedim. Yoksa buraya nakledilmesi güç olan başka olaylar da var. Bence yukardaki de çok çok güzel. Haksız mıyım!
Başarılar...