Appeler une fonction qui n'est pas sur le chemin Matlab SANS AJOUTER CE CHEMIN
J'ai été chercher une après-midi et n'ont pas trouvé de solution pour appeler en matlab une fonction en spécifiant son chemin et de ne pas ajouter de son répertoire sur le chemin.
Cette question est assez similaire à Est-il possible d'appeler une fonction qui n'est pas dans le path de MATLAB?mais dans mon cas, je ne veux pas appeler une fonction intégrée, mais juste une fonction normale comme défini dans un m-file.
Je pense que les poignées peuvent être une solution (car apparemment, ils peuvent se référer à des fonctions qui ne sont pas sur le chemin), mais j'ai encore trouvé aucun moyen de créer une poignée sans cd
-ing dans le répertoire, la création et la cd
-ing en arrière. En essayant de "explorer" ce qu'est une fonction de gérer objet est et comment en faire un avec une référence à une fonction particulière, pas sur le chemin qui m'a amené nulle part.
De sorte que la solution pourrait venir de deux angles:
1) Vous savez comment créer une poignée pour un m-fichier dans un répertoire spécifique.
2) Vous connaissez un moyen d'appeler une fonction n'est pas sur le matlab chemin.
EDIT: je viens de découvrir la fonction functions(myhandle)
qui fait vous permet de voir le chemin à laquelle la poignée est de renvoi. Mais toujours pas moyen de le modifier si...
source d'informationauteur reverse_engineer
Vous devez vous connecter pour publier un commentaire.
La solution comme l'indique le commentaire Un pour créer une fonction de la poignée avant l'appel de la fonction est joliment mis en œuvre par @Rody Oldenhuis' FEX Contribution:
http://www.mathworks.com/matlabcentral/fileexchange/45941-constructor-for-functionhandles
C'est faisable, mais nécessite un peu d'analyse, et un appel à
evalin
.J'ai ajouté (il y a plusieurs années!) une fonction MATLAB Central d'Échange de Fichier appelé
externalFcn
http://www.mathworks.com/matlabcentral/fileexchange/4361-externalfcn
qui gère les appels off-chemin de fonctions. Par exemple, j'ai une fonction appelée
offpathFcn
qui retourne simplement une structure avec un message de succès, et la valeur de l'entrée. Le stockage de cette fonction désactivée mon MATLAB chemin, je peux l'appeler à l'aide:Ce retourne:
(À noter que mon application est limitée, et améliorable; vous devez inclure une sortie avec un signe égal pour que cela fonctionne. Mais il devrait vous montrer comment réaliser ce que vous voulez.)
(MathWorks ingénieur d'application)
J'ai modifié Thierry D " code d'éviter l'utilisation de feval, je me sens toujours mal à l'aise. Remarque ce n'est toujours pas obtenir autour de cd-ing dans le répertoire en question, mais bon, il se passe derrière les coulisses, faire semblant que ça n'arrive pas 🙂
Notez également que Ben Voigt a souligné ci-dessus: les appels à des fonctions d'assistance en dehors de la trajectoire va échouer.
et de l'appel, il devrait ressembler à
La
exécuter
commande peut exécuter un fichier de script à partir d'un répertoire, mais il ne peut pas appeler une fonction (avec entrée et sortie des arguments).Ni
feval
nistr2func
permis de répertoire d'information en fonction de la chaîne.Je suggère d'écrire votre propre wrapper pour
str2func
que:Méfiez-vous, cependant, que d'une poignée pour une fonction n'est pas dans le chemin d'accès est susceptible de se rompre, parce que la fonction sera pas en mesure d'invoquer un helper code stocké dans d'autres fichiers dans son répertoire.