Contenuto principale

Creazione dell'handle della funzione

Che cos'è un handle della funzione?

Un handle della funzione è un tipo di dati di MATLAB® che memorizza un'associazione a una funzione. La chiamata indiretta di una funzione consente di invocare la funzione indipendentemente da dove viene chiamata. Gli usi tipici degli handle della funzione comprendono:

  • Il passaggio di una funzione a un'altra funzione (spesso chiamato funzioni di funzioni). Ad esempio, passando una funzione alle funzioni di integrazione e ottimizzazione, come integral e fzero.

  • La specifica delle funzioni di richiamo (ad esempio, un richiamo che risponde a un evento dell'interfaccia utente o interagisce con l'hardware di acquisizione dati).

  • La costruzione di handle a funzioni definite in linea invece che memorizzate in un file di programma (funzioni anonime).

  • La chiamata di funzioni locali dall'esterno della funzione principale.

È possibile verificare se una variabile h è un handle della funzione utilizzando isa(h,'function_handle').

Creazione di handle della funzione

Per creare un handle a una funzione, anteporre al nome della funzione il segno @. Ad esempio, se si dispone di una funzione chiamata myfunction, creare un handle chiamato f come segue:

f = @myfunction;

Si chiama una funzione utilizzando un handle nello stesso modo in cui si chiama direttamente la funzione. Ad esempio, si supponga di avere una funzione denominata computeSquare, definita come:

function y = computeSquare(x)
y = x.^2;
end

Creare un handle e chiamare la funzione per calcolare il quadrato di quattro.

f = @computeSquare;
a = 4;
b = f(a)
b =

    16

Se la funzione non richiede alcun input, si può chiamare la funzione con parentesi vuote, come ad esempio

h = @ones;
a = h()
a =

    1

Senza le parentesi, l'assegnazione crea un altro handle della funzione.

a = h
a = 

    @ones

Gli handle della funzione sono variabili che possono essere passate ad altre funzioni. Ad esempio, calcolare l'integrale di x2 nell'intervallo [0,1].

q = integral(f,0,1);

Gli handle della funzione memorizzano il loro percorso assoluto; pertanto, quando si dispone di un handle valido, è possibile invocare la funzione da qualsiasi posizione. Non è necessario specificare il percorso della funzione quando si crea l'handle, ma solo il nome della funzione.

Quando si creano gli handle alle funzioni, tenere presente quanto segue:

  • Lunghezza del nome: ciascuna parte del nome della funzione (compresi i nomi di pacchetti e classi) deve essere inferiore al numero specificato da namelengthmax. In caso contrario, MATLAB tronca l'ultima parte del nome.

  • Ambito: la funzione deve trovarsi nell'ambito al momento della creazione dell'handle. Pertanto, la funzione deve trovarsi nel percorso di MATLAB o nella cartella corrente. Mentre, per gli handle a funzioni locali o annidate, la funzione deve trovarsi nel file corrente.

  • Precedenza: quando sono presenti più funzioni con lo stesso nome, MATLAB utilizza le stesse regole di precedenza per definire gli handle della funzione e per chiamare le funzioni. Per maggiori informazioni, vedere Function Precedence Order.

  • Sovraccarico: quando un handle della funzione viene invocato con uno o più argomenti, MATLAB determina l'argomento dominante. Se l'argomento dominante è un oggetto, MATLAB determina se la classe dell'oggetto ha un metodo che sovraccarica lo stesso nome della funzione associata all'handle della funzione. In caso affermativo, viene invocato il metodo dell'oggetto anziché la funzione associata.

Funzioni anonime

È possibile creare handle a funzioni anonime. Una funzione anonima è una funzione MATLAB basata su un'espressione di una riga che non richiede un file di programma. Costruire un handle a una funzione anonima definendo il corpo della funzione anonymous_function e un elenco separato da virgole di argomenti di input alla funzione anonima arglist. La sintassi è la seguente:

h = @(arglist)anonymous_function

Ad esempio, creare un handle sqr a una funzione anonima che calcola il quadrato di un numero e chiamare la funzione anonima utilizzando il suo handle.

sqr = @(n) n.^2;
x = sqr(3)
x =

     9

Per maggiori informazioni, vedere Funzioni anonime.

Array di handle della funzione

È possibile creare un array di handle della funzione raggruppandoli in un array di celle o di struttura. Ad esempio, utilizzare un array di celle:

C = {@sin, @cos, @tan};
C{2}(pi)
ans =

    -1

Oppure utilizzare un array di struttura:

S.a = @sin;  S.b = @cos;  S.c = @tan;
S.a(pi/2)
ans =

     1

Salvataggio e caricamento di handle della funzione

È possibile salvare e caricare gli handle della funzione in MATLAB, come qualsiasi altra variabile. In altre parole, utilizzare le funzioni save e load. Se si salva un handle della funzione, MATLAB salva le informazioni del percorso assoluto. È possibile invocare la funzione da qualsiasi posizione raggiungibile da MATLAB, purché il file della funzione esista ancora in quella posizione. Un handle non valido si verifica se la posizione o il nome del file sono cambiati da quando è stato creato l'handle. Se un handle non è valido, MATLAB potrebbe visualizzare un avviso quando si carica il file. Quando si invoca un handle non valido, MATLAB genera un errore.

Vedi anche

| | | |

Argomenti