azoun” post=61770Ciao a tutti.
E’ una domanda che riguarda più Lua che LuaTeX, comunque riporto il seguente esempio
`
% !TEX encoding = UTF-8
% !TEX program = LuaLaTeX
\documentclass{report}\def\pr#1{\directlua{tex.print(tostring(#1))}}
\parindent=0pt
\begin{document}
\directlua{
A = {a = {1,2,3},
b = {4,5,6}}
B = A
B.b[1] =99X = 10
Y = X
Y = 2
}
$\texttt{B.b[1]}=\pr{B.b[1]}$%$\texttt{A.b[1]}=\pr{A.b[1]}$
Come mai? Sembra che copi i “puntatori” e non la tabella, infatti:
\begin{description}
\item\pr{B}
\item[A]\pr{A}
\end{description}
sono %
\directlua{
if tostring(A)==tostring(B) then
tex.print(“uguali.”)
else
tex.print(“diversi.”)
end
}Invece se le variabili sono scalari, \pr{Y} uguale a \pr{X}. Va bene.
\end{document}
`Come posso copiare la struttura A in un’altra variabile in modo che se modifico quest’ultima, non mi alteri anche l’originale?
Grazie
Michele
Ciao,
normalissimo comportamento infatti in Lua le tabelle sono oggetti e le variabili sono dei riferimenti ad esso. Se si copiano le variabili si copiano i riferimenti alla stessa tabella.
Occorre quindi fare una copia valore per valore della tabella, magari ricorsivamente se la tabella contiene altre tabelle (deep copy).
Nel tuo caso creerei una funzione di copia più semplice sapendo quale struttura ha la tabella da copiare.
Un doppio ciclo for con l’uso degli iteratori.
Bye