Yeni bir şey öğrendim, şurda ve çalışan kod aşağıda. Kaynağındaki (evilrat'ın çözümü) sözde kod olduğu için çalışmıyor...
struct Alan
{
int en, boy;
}
alias Oda = Alan[string];
void var_Mı(Value, Key, Func)
(Value[Key] liste, Key isim, in Func fun)
{
if (auto adresi = isim in liste)
{
fun(*adresi, isim);
} else {
isim.writeln(" bulunamadı!");
}
}
enum evinNeresi = [ "Mutfak", "Salon",
"Yatak Odası"];
import std.stdio;
void main()
{
Oda evimde = [evinNeresi[0]: Alan(3, 5),
evinNeresi[2]: Alan(7, 4)
];
evimde.var_Mı(evinNeresi[2],
// Alanı hesaplama, tabi listede varsa:
(Alan oda, string isim)
{
auto alan = oda.en;
alan *= oda.boy;
isim.write(" m²'si: ", alan);
}
);
}
Bu kodda temel nokta var_Mı() ismindeki işlev. Öyle bir yardımcı ki bu, çağrışımsal dizilerle çalışırken her yerde kullanabilirsiniz ve kullandığınız yerde ona yeni bir kişilik katabilirsiniz.
Çünkü 2 parametreli (biri key) lambda işlev alıyor. Eğer işlem listede yoksa ya hiçbir şey yaptırmaz, ya hata kodu atabilir, ya da koddaki gibi sıradan bir uyarı yazdırabilirsiniz.
Not: Listeye (evimde dizisi) 0 ve 2 numaralı eleman ekleniyor, eğer uyarı mesajını görmek istersen 1 numarayı sorgulatmayı deneyin.
SDB@79