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. ]