January 16, 2013

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.digitalmars-d@puremagic.com

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 16, 2013

Genel istek üzerine makale haline de getirilmiş:

http://wiki.dlang.org/Defining_custom_print_format_specifiers

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]