Essayé googler , mais je n'ai rien trouvé.
J'ai quelques fichiers et dossiers dans mon dossier MATLAB actuel.
L'un de ces dossiers s'appelle 'Map' et contient un fichier 'map1.m' que je souhaite appeler à partir de mon code situé dans le dossier MATLAB actuel.
Dans mon code, je ne peux pas l'appeler ainsi:
/Map/map1;
mais je peux le faire comme ça:
cd Map;
map1;
cd ..;
D'une certaine manière, la méthode ci-dessus semble incorrecte. Y a-t-il une manière plus élégante de le faire?
Vous pouvez exécuter le fichier sans ajouter le dossier à votre chemin manuellement, à l’aide de la commande run
, qui est spécifiquement destinée à de tels cas. De la documentation:
run est une fonction pratique qui exécute des scripts qui ne sont pas actuellement sur le chemin.
Vous appelez votre fonction/script comme
run /Map/map1
Si vous souhaitez exécuter la fonction/le script en saisissant simplement son nom et non avec le chemin complet (ou relatif), vous devez ajouter le dossier à votre chemin.
Comme l'a noté @mutzmatron, vous ne pouvez pas utiliser run
pour appeler des fonctions avec des arguments d'entrée/sortie. Donc, sauf s'il s'agit d'un script/d'une fonction sans arguments d'entrée/sortie, utiliser run
ne fonctionnera pas et vous devrez ajouter le dossier à votre chemin.
Pour des bonnes pratiques de codage et pour travailler dans les cas où votre fonction a des entrées/sorties, ajouter/supprimer le dossier de votre chemin est la bonne façon de procéder. Donc pour ton cas,
addpath /Map
...
map1;
...
rmpath /Map
L'important est que votre appel de fonction soit pris en sandwich entre les commandes addpath
et rmpath
. Si vous avez des fonctions du même nom dans les deux dossiers, vous devriez alors l’intercaler plus étroitement, c’est-à-dire une ligne avant et une ligne après, afin d’éviter les conflits.
Ajoutez simplement tous ces répertoires au chemin Matlab avec addpath
comme le suggère gnovice. Vous pourrez ensuite appeler les fonctions normalement, et elles seront visibles pour lesquelles (), help (), depfun () et les autres commandes de méta-programmation Matlab. Vous pouvez placer les appels addpath()
dans votre fichier startup.m
pour les afficher automatiquement à chaque démarrage de Matlab.
Changer le chemin avec addpath/map1 ()/rmpath présente à chaque fois des inconvénients.
Et utiliser run () ou cd () vous-même est moche, car les chemins relatifs vont poser des problèmes.
Si vous voulez vraiment séparer les fonctions des sous-répertoires pour qu’elles ne puissent pas se "voir", vous pouvez créer ces espaces de noms de répertoires en mettant un "+" devant leurs noms, puis qualifier les appels de fonction avec l’espace de noms, comme Map.map1()
.
Juste pour contribuer au débat qui modifie la trajectoire ...
Une façon de le rendre "plus sûr" est d'écrire
% start of my code: create function handles
% to the functions I need:
try
cd Map
map1_func = @map1;
catch mexception
end
cd ..
Cela tente de conserver le répertoire actuel et vous obtenez un descripteur de la fonction dans un autre répertoire.
Le seul problème est que cette méthode ne [] ne fonctionnera pas si map1
s'appuie sur d'autres fonctions du répertoire Map
.