July 30, 2022

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|