Path not searching in current directory first

5 views (last 30 days)
On my path I have a folder called "Other_Code" which contains "@myClass/myClass.m". In the directory I am running from I have a file called "myClass.m" which overloads the one in the other folder. Since I am running the code from the same directory, MATLAB should search for the file in my current location first before moving onto the folders in my path. I am getting errors because the search path is somehow bypassing my current directory and accessing the folders in the path first. What's even more strange is that if I put a debug at the point that the function is called, I can use the command "which myClass", it returns the correct location of "currentDirectory/myClass.m". When I step through the code and get an error, the error info links me to the file "Other_code/@myClass/myClass.m".
Why is this happening, and how can I fix it?

Accepted Answer

TARUN
TARUN on 14 Jun 2025
Edited: TARUN on 14 Jun 2025
The issue you're facing stems from MATLAB's class resolution rules, which differ from normal function resolution. Even though which myClass shows your current folder’s version, MATLAB gives priority to the @myClass folder inside your path (Other_Code/@myClass) because class folders on the path override regular .m files in the current folder.
Feel free to try one of the following workarounds to resolve this:
  • Temporarily remove the interfering path using:
rmpath('path_to/Other_Code');
  • Rename your local file (myClass.m) to avoid name conflicts.
  • Use a local @myClass folder in the current directory to ensure precedence.
  • Force MATLAB to refresh the path cache and class definitions:
clear classes;
rehash path;
For more details on how MATLAB prioritizes class definitions, check this documentation:

More Answers (0)

Categories

Find more on File Operations in Help Center and File Exchange

Tags

Products


Release

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!