How to access a function under a given path?
60 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
mahoromax
el 17 de Jul. de 2019
Comentada: TADA
el 18 de Jul. de 2019
Greetings,
I am wonderin whether it is possible to call a function that is not located in the current directory, nor in a subfolder nor on the matlab path.
I want to call a function (with argument) based on the absolute path, where this funtion is located
Lets say I have a path saved in a variable, and I want to use the function
targetfunc
with the input argument 5.
targetdir = "A:\EI\OU";
Things like
targetdir\targetfunc(5)
obviously dont work, neither does
run
(which is made for scripts?)
The background of this is, that a script A shall clone a GIT repository to a specific folder ( another one in the same parent folder for now) and use a function that is located there.
- Adding the targetdir to path would work, but I want to try to work around this method, to minimize the risk of getting names double on the path
- Always creating an absolute pah to the function, that is called: I dont know how to call a function with an absolute path??
- changing current directory might also work, but afaik this is also bad style and opens the way for problems if I use other functions/scripts in the original script (A).
0 comentarios
Respuesta aceptada
TADA
el 17 de Jul. de 2019
A possible solution would be to make every git branch a package. You will have to make all subfolders packages as well, but that clears the risk of duplicate names.
It also solves the problem of calling function in specific folder.
Matlab decides what function to call in case of duplicate names according to these rules, so calling a function in a specific folder is impossible as far as i know
Lets say you have a branch called "ver1" with a folder called "common" in that folder there is an .m file function called "foo1"
So you create the new .m file in this path: "root path\+ver1\+common\foo1.m"
Now to invoke this function you will have to use the package tree like that:
ver1.common.foo1();
Also works with function handles:
fooHandle = @ver1.common.foo1;
For this to work you will have to add the root path of all branches to the mat path, and to rename all folders to have "+" at the beginning so that matlab creates a package
5 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Search Path en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!