2017-06-24 1 views
2

Wie erstelle ich einen Verweis auf unveränderliche Klassen, aber während die Fähigkeit, den Verweis neu zuweisen, wie string?Wie erstellt man einen neu zuweisbaren Verweis auf eine unveränderbare Klasse?

import std.stdio; 

immutable class Test { 
    string test(){ 
     return "test"; 
    } 
} 

void main(){ 
    auto test = new Test; 
    writeln(test.test); 
} 

Dies verursacht einen Fehler, weil die erzeugte Instanz nicht unveränderlich ist:

test.d(14): Error: immutable method test.Test.test is not callable using a mutable object 

new immutable funktioniert auch nicht, da die resultierende Variable kann keine neuen danach zugeordnet werden.

immutable(Test)* würde funktionieren, aber gibt es eine Möglichkeit, Zeiger zu vermeiden?

Antwort

0

Sie immutable auf die gleiche Art und Weise von auto verwenden können, um Typen zu ableiten:

immutable test  = new Test; 
immutable other_test = test; 
+0

Nein, was ich brauche: 'Magie Test = new unveränderlich Prüfung; Test Test; test = neuer unveränderlicher Test; ' – weltensturm

+0

Hm. Ich glaube nicht, dass das möglich ist. Weil der Punkt von unveränderlich ist, um zu garantieren, dass sich Variable während der Laufzeit niemals ändert. Vielleicht, wenn Sie Ihre Absichten erklären, können wir Ihr Problem lösen :) Sie sagten "wie Zeichenfolge": Zeichenfolgen sind ein Alias ​​von unveränderlich (char) []. Die Zeichen selbst sind unveränderlich, das String-Array jedoch nicht. – Patric

Verwandte Themen