Jump to content

Frage zu lua (Liste)


Recommended Posts

Hallo,

... ist mir erst gestern aufgefallen und ich verstehe es nicht so ganz...

Wenn ich habe...

local a=$("Schalter klein").transformation.position
  for i=1,5 do
    local b=a
    b.x=b.x+i
  print("a.x="..a.x,"b.x="..b.x)
end

... ist das Ergebnis...
Bild01.jpg.e33539d3aa9db94460b26299ff09130d.jpg

Wenn ich habe...

local a=$("Schalter klein").transformation.position
  for i=1,5 do
    local b={x=a.x,y=a.y,z=a.z}
    b.x=b.x+i
  print("a.x="..a.x,"b.x="..b.x)
end

... ist das Ergebnis...
Bild02.jpg.44cae04398eb5718844ca4e3b147c058.jpg

Warum wird im ersten Fall a geändert, wenn sich b ändert?

Gruß
EASY

Edited by EASY
Link to comment
Share on other sites

vor 26 Minuten schrieb EASY:

Warum wird im ersten Fall a geändert, wenn sich b ändert?

Weil im ersten Fall beide (a und b) auf dieselbe Liste zeigen.
Die Liste wird nicht kopiert, sondern beide Variablen enthalten die Adresse derselben Liste 

a = {"Eins", "Zwei", "Drei", "Vier"}
b = a
b[1] = "neu"
print(a[1])   -- neu

 

Edited by Goetz
Schreibfehler korrigiert
Link to comment
Share on other sites

vor 21 Stunden schrieb EASY:

in manchen Dingen ist lua eben schon speziell

... aber nicht in diesem Fall. "Copy"-Verhalten ist z.B. in Python ganz ähnlich,
und leider nicht immer ganz einfach vorhersehbar, ob die Referenz kopiert wird oder das ref. Objekt.
Einfache Zuweisungen der Form  "Obj_Ref_A = Obj_Ref_B" beziehen sich meistens auf die Referenz (oder "Pointer", wie man früher sagte, z.B. in Pascal oder C),
wenn man nur einzelne Elemente eines Objekts zuweist  (wie in "b={x=a.x,y=a.y,z=a.z}")  kann es keine Obj-Ref sein, auch wenn die Einzelkopien wieder zu einem Objekt der ursprünglichen Form ("Typ") zusammen gesetzt werden.
Gruß Eggu

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...