Re: LuaTeX: copiare la struttura A in B. Problema

#62811
robitex
Amministratore del forum
    Up
    0
    Down
    ::

    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] =99

    X = 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

    Go to top