immutable auto a = Array!int([1, 2, 3]);
Error: cannot implicitly convert expression (((Array!int __slArray2557 = Array(RefCounted(RefCountedStore(null)));) , __slArray2557).this([1, 2, 3])) of type Array!int to immutable(Array!int)Erstellen von benutzerdefinierten unveränderliche Objekte
Oft möchte ich nur einige Objekt zur Laufzeit erstellen, sie initialisieren und dann unveränderlich machen, aber wenn ich versuche, dies zu tun, erhalte ich den Fehler von oben.
Es scheint, dass ich ein veränderbares Objekt auf ein unveränderliches Objekt werfen kann
immutable auto a = cast(immutable Array!int) Array!int([1, 2, 3]);
Warum muss ich es immutable
werfen?
Ist Casting zu unveränderlich sogar legal?
Ich weiß eigentlich fast nichts über D, aber wenn Sie eine Variable als unveränderlich deklarieren, wird der Compiler wahrscheinlich erwarten, dass der Ausdruck auf der rechten Seite ein unveränderliches Objekt ist, also natürlich, wenn das nicht der Fall ist, wird es Ihnen wahrscheinlich geben ein Fehler. Ob es legal ist oder nicht, weiß ich nicht, aber wenn Sie keine Antwort erhalten, empfehle ich Ihnen, diese Frage in einem der D-Foren auf der offiziellen Website zu stellen. – nbro