Re: overloading

#69593
robitex
Amministratore del forum
    Up
    0
    Down
    ::

    antonio.macrì” post=68713

    è possibile gestire l’overloading degli operatori in LaTeX?
    l’ideale sarebbe poter fare qualcosa di questo tipo
    `\newcommand{\insulto}[2]{#1 è #2}
    \newcommand{\insulto}[3]{#1 e #2 sono #3}
    \insulto{luca}{scemo} e \insulto{marco}{francesco}{cretini}`
    ho provato a giocare sui newcommand ma non riesco a concludere molto…

    È possibile a costo di sostituire le parentesi graffe con parentesi quadre o tonde, ma non lo puoi fare con \newcommand: devi “sporcarti” le mani con le definizioni TeX (il comando \def). Leggiti gli Appunti.

    In questo caso si parlerebbe più di overloading di “funzioni” cioè “comandi”, trattandosi di TeX.


    @robitex
    : l’overloading delle funzioni consente anche di avere il (solo) numero di argomenti diverso. Ma per avere più argomenti dello stesso tipo, non serve scomodare l’overloading (si può fare anche in C).

    Ciao,
    Antonio

    Uhm, continuo ancora ad essere dubbioso sulla possibilità di gestire un numero di argomenti variabili con TeX, per il semplice motivo che la ricerca dei token argomento compiuta da un comando è “fissa” (attendiamo pareri TeXnici). A meno che nel codice del comando a due argomenti non si inserisca un \@gobble o qualcosa del genere.
    Tipo:
    `
    \makeatletter
    % cmd con due arg
    \def\insulti@ii#1#2{#1 è #2}
    % cmd con tre arg
    \def\insulti@iii#1#2#3{#1 e #2 sono #3}

    % comando delimitato
    \def\ins@ulti#1#2#3{
    \def\tmp@{#3}
    \ifx\tmp@\@nil
    \insulti@ii#1#2
    \else
    \insulti@iii#1#2#3
    \fi
    }

    % cmd utente
    \def\insulti#1{
    \ins@ulti#1\@nil}

    \makeatother
    `

    Per l’overloading, ho in mente il funzionamento di Java mentre per il numero variabile di argomenti penso all’ellipsis …
    Un saluto.
    R.

    Go to top