I nomi di funzione devono essere univoci in MATLAB. Se non lo sono, quindi ci sono nomi duplicati, MATLAB usa il primo che trova sul tuo percorso di ricerca.
Detto questo, ci sono alcune opzioni aperte a voi.
Opzione 1. Utilizzare le directory @, inserendo ciascuna versione in una directory separata. Essenzialmente stai usando la capacità di MATLAB di applicare una funzione a classi specifiche. Quindi, si potrebbe impostare un paio di directory:
@char
@double
mettere la vostra copia dei myfun.m nelle rispettive directory. Ora, quando MATLAB vede un doppio input per myfun, indirizzerà la chiamata alla versione doppia. Quando MATLAB riceve l'input del char, va alla versione char.
ATTENZIONE. Non mettere queste directory @ esplicitamente sul tuo percorso di ricerca. Mettili ALL'INTERNO una directory che si trova sul tuo percorso di ricerca.
Un problema con questo schema è se si chiama la funzione con un input di precisione SINGLE, MATLAB avrà probabilmente un adattamento, quindi avresti bisogno di versioni separate per singolo, uint8, int8, int32, ecc. Non puoi semplicemente averne uno versione per tutti i tipi numerici.
Opzione 2. Avere solo una versione della funzione, che verifica il primo argomento per vedere se è numerica o char, quindi dirama per eseguire le attività in modo appropriato. Entrambi i pezzi di codice si troveranno più semplicemente in un file allora. Lo schema semplice avrà subfunzioni o funzioni annidate per fare il lavoro.
Opzione 3. Assegnare un nome alle funzioni in modo diverso. Ehi, non è la fine del mondo.
Opzione 4: come sottolinea Shaun, si può semplicemente cambiare la directory corrente. MATLAB cerca sempre prima nella tua directory corrente, quindi troverà la funzione in quella directory, se necessario. Un problema è che richiede tempo. Ogni volta che tocchi una directory, le cose rallentano, perché ora è necessario l'input del disco.
La parte peggiore della modifica delle directory riguarda l'utilizzo di MATLAB. È (IMHO) uno stile di programmazione scadente per forzare l'utente a trovarsi sempre in una directory specifica in base a quali input di codice desiderano eseguire. Meglio è uno schema guidato dai dati. Se stai leggendo o scrivendo i dati, allora sii in quella directory.Usa il percorso di ricerca MATLAB per classificare tutte le tue funzioni, poiché le funzioni tendono a non cambiare molto. Questo è un modo di operare molto più pulito rispetto al richiedere all'utente di migrare a directory specifiche in base a come chiameranno una determinata funzione.
Personalmente, tenderei a suggerire l'opzione 2 come la migliore. È pulito. Ha solo UNA funzione principale con cui devi lavorare. Se si desidera mantenere il distretto delle funzioni, inserirle come funzioni nidificate o secondarie separate all'interno del corpo della funzione principale. All'interno, naturalmente, avranno nomi distinti, basati su come sono guidati.
domanda correlata: [Eseguendo un file o chiamando una funzione il cui file è inserito in un'altra cartella con MATLAB?] (http://stackoverflow.com/questions/6153323/) –
Accidenti a Eitan, trovi sempre risposte come minuti prima di me haha buona chiamata però! – Shaun314