2017-06-05 5 views
0
  1. Angenommen, foo: ANY ist eine zuweisbare Entität.
  2. Was passiert, wenn ich foo := create {BOOLEAN} mache?

Es wäre immer scheitern, weil BOOLEAN (ein erweiterter Typ) entspricht nicht ANY (eine Referenz-Typ), richtig?Eiffel: Entsprechen erweiterte Typen ANY?

+0

Ich hatte den Eindruck, dass jeder Typ, erweitert oder nicht, ANY konform ist. Ich teste diesen Code: foo: = create {BOOLEAN} und es hat funktioniert. –

Antwort

1

Erweiterte Typen entsprechen den Referenztypen (sofern andere Konformitätsanforderungen erfüllt sind). Also, das Beispiel, das du erwähnst, funktioniert gut. Außerdem ist es in Ordnung, foo := True zu schreiben.

Der Hauptunterschied nach einem solchen reattachments ist, dass die Kopie-Semantik von expandiertem Typ erhalten wird, das heißt, wenn ein Unternehmen es bar vom Typ ANY die Zuordnung bar := foo eine Kopie des Booleschen Objekts bar anbringt, nicht die gleiche Referenz. Wenn also ein Wert des an foo angehängten Objekts nachträglich geändert wird, bleibt bar unverändert.

Beantworten Sie Ihre ursprüngliche Frage, BOOLEAN entspricht ANY.

+0

Dann, wenn 'foo: INTEGER_8_REF', darf ich tun' foo: = create {INTEGER_8} '? – g4v3

+0

@ g4v3, ja, das sollte in Ordnung sein. Wenn die Antwort zufriedenstellend ist, können Sie sie als akzeptiert markieren, damit SO-Benutzer sehen können, dass die Frage beantwortet wurde. Ansonsten können Sie gerne weitere Informationen anfordern. –

+0

Ja, das ist im Wesentlichen der Grund, warum ich es vorher nicht als akzeptiert markiert habe. Ich war immer noch nicht fertig mit deiner Antwort. Ich wollte noch etwas fragen. Aber ich dachte auch darüber nach, ob ich es als Kommentar oder als eigene Frage veröffentlichen sollte. Ich habe beschlossen, es als eine unabhängige Frage zu veröffentlichen. Ich werde dann auf deine Antwort warten! :) – g4v3