Merhaba,
Az önce farkettiğim ve bunu neden kitaplıklarımızdaki (örneğin "container" gibi) modüllere koymadığımıza hayret ettiğim bir kolaylık var. Tabi Ali hocadan veya başkasından "ben zaten bunu yapıyorum" ünlem cümlesi alabiliriz ama ben de (sanırım) çoğunluk gibi yapıyor ve köşeli parantezi şöyle usulca yerleştiriyordum:
string[] strArr;
strArr ~= "muz";
strArr ~= [ "karpuz", "avakado" ];
strArr.writefln!"%-(%s, %)";
typeid(strArr).writeln; /* ÇIKTISI:
muz, karpuz, avakado
immutable(char)[][]
*/
Buraya kadar tamam, janjanlı bir durum yok ama onun yerine şöyle bir alias kullanmak, işleri kolaylaştırmaz mı?
alias immutable(char[]) [] strings;
Sondaki s'ye dikkat! Tabi türü, nedense önceki standart tanımlamasından (immutable(char)[][]
) farklı. Şimdilik oraya takılmayalım çünkü farklı görünen ama birbirinin aynısı tepkiler veren durumlar var; konuşcaz! Belki 11'deki toplantıda?
Neyse, bir de örneklere geçelim:
import std.array, std.stdio;
void main()
{
strings s = ["beş", "dört"];
typeid(s).writeln; // immutable(immutable(char)[])[]
s ~= "bir";
s ~= "iki";
s.writefln!"%-(%s, %)"; // beş, dört, bir, iki
auto a = appender(&s);
typeid(a).writeln; // std.array.RefAppender!(immutable(string)[]).RefAppender
a.put = "üç";
immutable writeProtect = a.data;
writeProtect.writefln!"%-(%s, %)"; // beş, dört, bir, iki, üç
typeid(writeProtect).writeln; // immutable(immutable(immutable(char)[])[])
//writeProtect ~= "test"; /*** DERLEME HATASI ***/
}
Appender'ı şu sebepten denedim: Acaba kendi sarmalamamızı yapabilir miyiz? Yani, örneğin auto writeProtect = a.rdata;
şeklinde işimiz bitince veriyi bir yere güvenli şekilde gönderir ve customize appender nesnesini de sileriz. Bence akıllıca, deneyecem...
Başarılar...