Warum geht sowas?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Macintosh

Betreff: Warum geht sowas?

BeitragMi, Apr 21, 2010 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist aufgefallen, das alle Variablen Pointer sind, nur das man das nicht sieht. warum ist das so?

z.B.
Code: [AUSKLAPPEN]


local b:string

for local a:string = eachin(lol)

if a = "lol" then b = a

next



Wenn ich jetzt b:string ändere wird auch a:string geändert.
Was hat marc sich da ausgedacht? halte ich für äußerst merkwürdig.

mpmxyz

BeitragMi, Apr 21, 2010 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Irgendwie werde ich gerade aus deinen Aussagen nicht so ganz schlau.
Wie änderst du b?
Dein Beispiel ist nämlich nicht lauffähig.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

Macintosh

BeitragMi, Apr 21, 2010 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ba angenommen ich habe einen Type "TAuto"

und ich habe 10 autos in einer liste.
wenn ich mir ein auto in eine andere Variable "hole"
Code: [AUSKLAPPEN]

for auto:TAuto = eachin(autos)

meinAuto = auto

next


und dann z.B. Code: [AUSKLAPPEN]
meinAuto.speed = 6000

schreibe wird das auch bei dem Auto-objekt inder der liste übernommen, obwohl ich dieses nicht anspreche.

Und das ist ne sache die eigentich nicht sein dürfte, da niwo steht das meinAuto nen pointer ist.

mpmxyz

BeitragMi, Apr 21, 2010 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Nirgendswo wurde gesagt, dass es keine sind! Wink
Im Gegenteil: Jeder redet davon, dass es Referenzen sind.
Referenzen zeigen, wie der Name anmuten lässt, auf etwas.
Sie zeigen auf die Objekte.
Und wenn du ein Objekt änderst, wirst du die Änderung überall spüren können, wo du dieses Objekt verwendest bzw wo du eine Referenz auf diese Objekt hast.
Da hast du wohl etwas falsch verstanden.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

Macintosh

BeitragMi, Apr 21, 2010 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm achso... wie kann ich das unterbinde? muss ich extra kopiermethoden schreiben ??

ComNik

BeitragMi, Apr 21, 2010 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich schon.
Du musst eine komplett neue Instanz und nicht eine Referenz auf eine vorhandene erzeugen.
Dabei könnte New recht hilfreich sein.

lg
ComNik
WIP: Vorx.Engine

BladeRunner

Moderator

BeitragDo, Apr 22, 2010 5:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder Du klonst die Objekte per Reflection, was dann einer 1:1 Kopie entspricht.
Es ist übrigens aus Performancegründen sehr sinnvoll dass nur Referenzen übergeben werden, da sonst unter Umständen riesige Dateimengen kopiert werden müssen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group