How to access a function under a given path?
56 views (last 30 days)
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
with the input argument 5.
targetdir = "A:\EI\OU";
obviously dont work, neither does
(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).
TADA on 17 Jul 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:
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