Forum: Ders Arası RSS
Kendi düzen belirtecini belirlemek
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Kendi düzen belirtecini belirlemek
Nesneleri %s ile yazdırmak zaten kolay. toString()'in void delegate(const(char)[]) alan yüklemesini kullanarak daha etkin kod üretebildiğimizi de konuşmuştuk. Hatta, Zekeriya'nın bir konusunda FormatSpec'ten yararlanmıştık.

toString()'in bir yüklemesi daha varmış:
    void toString(void delegate(const(char)[]) yazıcı, FormatSpec!char düzen) const;
O yüklemesi hangi düzen belirtecinin kullanıldığını öğrenmeye yarıyormuş. Bunları şu konudan öğrendim:

  http://forum.dlang.org/post/mailman.486.1358360121.22503.d…

Oradaki örneği daha basit olarak aşağıdaki gibi çevirdim. Dörtgen türüne %G belirtecini tanıtıyor ve dörtgeni görsel olarak yazdırıyor:
import std.format;
import std.stdio;
import std.string;
 
struct Dörtgen
{
    size_t en;
    size_t boy;
 
    void toString(void delegate(const(char)[]) yazıcı,
                  FormatSpec!char düzen) const
    {
        if (düzen.spec == 'G') {
            foreach (e; 0 .. en) {
                foreach (b; 0 .. boy) {
                    yazıcı("*");
                }
 
                yazıcı("\n");
            }
 
        } else {
            /* Not: düzen.spec'in burada gerçekten de %s olduğunu
             * denetlemeliydik. Bu örnekte hata vermek yerine öyle
             * varsayıyoruz ve yazdırıyoruz. */
            yazıcı(format("%sx%s boyutlarında bir dörtgen", en, boy));
        }
    }
}
 
void main()
{
    auto dörtgen = Dörtgen(4, 10);
    writefln("%s", dörtgen);
    writefln("%G", dörtgen);   // <-- Görsel olarak
}
Çıktısı:

4x10 boyutlarında bir dörtgen
**********
**********
**********
**********


Ali
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Genel istek üzerine makale haline de getirilmiş:

  http://wiki.dlang.org/Defining_custom_print_format_specifi…

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 11:21:11 (UTC -08:00)