2016-10-01 3 views
-3

In meinem Code, habe ich eine Variable auf den Inhalt einer Tabelle, wie so:Lua ungeradee Tabellen Verhalten

colorTable = {{255, 255, 255}} 
color = colorTable[1] 

Mein Problem ist, wenn ich den Wert color bearbeiten ändert er den ursprünglichen Wert in colorTable

So am Anfang, colorTable[1][1] gleich 255, aber nachdem ich laufen diese:

color[1] = color[1] - 10 

colorTable[1][1] gleich 245. Jede Hilfe wird geschätzt.

+1

Dies ist kein merkwürdiges Verhalten, es ist das Verhalten, das man erwarten würde, wenn man zumindest das Kapitel "Grundlegende Konzepte" des Lua-Handbuchs gelesen hätte. https://www.lua.org/manual/5.3/manual.html#2.1 Es ist wie die zweite Seite ... Tabellen werden immer als Referenz kopiert. Die Farbe bezieht sich auf die gleiche Tabelle wie colorTable [1], daher bezieht sich die Farbe [1] auf colourTable [1] [1]. – Piglet

+2

Um klar zu sein, "Farbe [1] = Farbe [1] - 10" "editiert nicht den Wert von' Farbe' "; es aktualisiert nur den Wert seines Mitglieds mit der Schlüsselnummer 1. "Farbe" wird überhaupt nicht geändert; Es ist die gleiche Tabellenreferenz. –

Antwort

5

Die folgende Zeile schafft eine Referenz (color) mit dem Tisch in colorTable:

color = colorTable[1] 

Wir werden nur die Bezugnahme auf den Wert zu manipulieren, die keine Mittel zur Kopie nicht vorschlagen.

Wenn wir stattdessen versuchen Sie Folgendes:

color = {table.unpack(colorTable[1])} 

Wir den Konstruktor aufrufen, es mit Werten füllen entpackt aus colorTable[1], die 255, 255, 255 enthält. Wir haben dann eine neue Tabelle werden diese Werte halten und Durchführung von arithmetischen auf sie nicht die, die in colorTable nicht beeinflusst:

print(colorTable[1][1]) 

Ergebnis:

255 

anschließend:

color[1] = color[1] - 10 

print(colorTable[1][1]) 

Ergebnis :

255