Bunun nedeni, dirEntries()'in (aslında onun döndürmüş olduğu DirIterator türünün) birden fazla opApply() yüklemesinin bulunması:
http://www.d-programming-language.org/phobos/std_file.html#dirEntries
string döndüren yükleme yalnızca klasördeki nesnelerin isimlerini verir. DirEntry yükleme ise klasördeki nesne hakkında daha ayrıntılı bilgi verir. Bu yüklemelerden hangisini istediğimizi bu durumda seçmek zorunda kalıyoruz.
Bazı durumlarda ise açıkça seçmemiz gerekmez. Örneğin eşleme tablolarının da opApply() yüklemeleri vardır ama hangisini istediğimiz değişken adedinden anlaşıldığı için türleri yazmak gerekmez:
import std.stdio;
void main()
{
int[string] tablo = [ "üç" : 3, "dört" : 4 ];
// Tek değişkenli opApply()'ı kullanır
foreach (değer; tablo) {
writeln(değer);
}
// İki değişkenli opApply()'ı kullanır
foreach (indeks, değer; tablo) {
writefln("%s => %s", indeks, değer);
}
}
DirIterator'ın yüklemelerinin ikisi de tek değişkenli olduklarından seçmek gerekiyor.
Yapı ve sınıfları foreach'e uyduran opApply() bana bayağı karışık gelmişti. Şurada 'foreach desteğini opApply işlevleri ile sağlamak' başlığı altında var:
http://ddili.org/ders/d/foreach_opapply.html
O bölümün 2 numaralı problemi de aynen dirEntries()'deki gibi tek değişkenli iki opApply() yüklemesi sunar.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]