Merhaba,
Gerçi başlık yanıltıcı çünkü aşağıdaki bütün marifet immutable olmadan kurulan temsilci işlev ile ilgili. Ama dikkat, new işleçi ile kurmadığınız müddetçe bu çalışmıyor:
auto imstr(string str) pure @safe
{
struct IMSTR
{
string s;
void delegate(string s) @safe update;
string toString() const { return s; }
}
auto s = new IMSTR(str);
s.update = (_) { s.s = _; };
return s;
}
import std.stdio;
void main() @safe
{
immutable auto str = imstr("Test 123");
writeln(*str);
str.update("TEST A");
writeln(*str);
str.update("TEST B");
//str.s = "TEST C";
writeln(*str);
typeid(str).writeln;
}
Bir dikkat daha! Derlenmesin diye gizlediğim satırı açarsanız böyle bir yapıyı (isrerseniz işlev dışına alın) neden değiştiremeyeceğimizi anlarsınız.
|Başarılar|