7
votes

Comment imiter le comportement "Inclure" dans Matlab?

Dans MATLAB, je peux définir plusieurs fonctions dans un fichier, seule la seule fonction définie étant visible externe à ce fichier. Sinon, je peux mettre chaque fonction dans son propre fichier et les rendre visibles globalement à travers le chemin. J'écris une application pilotée par menu, où chaque élément de menu exécute une fonction différente. Actuellement, ceux-ci sont tous dans un grand fichier, qui devient de plus en plus difficile à naviguer. Ce que je voudrais faire, c'est mettre des groupes de fonctions connexes dans des fichiers distincts.

Je pense que je peux faire quelque chose comme celui-ci en mettant tout l'enfant qui fonctionne dans un répertoire distinct puis en ajoutant le répertoire au chemin de ma fonction mère, mais cela se sent un peu désordonné et inélégant.

Quelqu'un peut-il faire une meilleure suggestion?

Note: Je connais le plus le plus avec Matlab 2006, mais je suis en train de passer à Matlab 2009.


3 Réponses :


5
votes

Peut-être quelque chose comme ça,

path(pathdef)


2 commentaires

+1 Parce que c'est une solution raisonnable que j'avais envisagé.


Si les fichiers figurent dans une hiérarchie de dossiers, vous pouvez également les ajouter à tous avec addpath (GenPath (chemin)); . Notez que la commande genpath est généralement très lente.



16
votes

Une suggestion, qui éviterait de devoir modifier le chemin MATLAB , est d'utiliser un Répertoire de fonctions privées . Par exemple:

Disons que vous avez une fonction appelée test.m dans le répertoire \ matlab \ temp \ (qui est déjà sur le chemin MATLAB). S'il y a des fonctions locales dans test.m que vous souhaitez placer dans leurs propres fichiers M et que vous voulez seulement test.m pour leur avoir accès, vous le souhaitez Créez d'abord un sous-répertoire dans \ matlab \ temp \ appelé privé . Ensuite, placez la fonction locale individuelle M-Files à partir de test.m dans cet privé sous-répertoire.

Le sous-répertoire privé n'a pas besoin d'être ajouté au chemin MATLAB (en fait, il ne doit pas être ajouté être ajouté au chemin pour fonctionner correctement) . Seuls le fichier test.m et d'autres fichiers M dans le répertoire au-dessus de la sous-répertoire privé ont accès aux fonctions qu'il contient. Utilisation de fonctions privées, vous pouvez imiter efficacement le comportement de Fonctions locales (c.-à-d. Portée limitée, surcharge de fonction, etc.) sans avoir à mettre toutes les fonctions dans le même fichier M (qui peut être très grande pour certaines applications).


3 commentaires

Je ne savais pas que tu pouvais faire ça. Je vais lui donner un aller pour voir comment ça marche. Au moins tous les fichiers de fonction seront cachés dans un coin tranquille!


On dirait que les documents liés ici ont été supprimés! Les répertoires de la fonction privée sont-ils considérés comme obsolètes?


@Dan: Non, pas obsolète. Juste un ancien, mauvais lien puisque TMW a mis à jour leurs documents en ligne. J'ai édité dans les nouveaux liens.



1
votes

Vous pouvez utiliser des sous-dossiers qui commencent par "+" pour séparer les fonctions dans des espaces de noms.

Par exemple: P>

Placez une fonction "Barre" dans le dossier "+ FOO" P >

foo.bar() % prints hello world


0 commentaires