Matlab does not find new method in class folder without "clear classes"
20 次查看(过去 30 天)
显示 更早的评论
I want to understand if this is intended behavior or dependes on something specific to my setup.
I have a class in a class folder such as @world_t/word_t.m. I also have one or more methods in separate files in said class folder @world_t. I have a program that instantiates an object and runs some methods, it works.
Now if I add a new method "run_sim" by adding a file @world_t/run_sim.m and modify the program to call that method, it does not work. The error is "Unrecognized method, property, or field 'run_sim' for class 'world_t'.".
If I do "clear classes" and run the program again it works. So apparently Matlab does not see the new method added when the old class is already loaded into memory, as can be seen by "inmem()" call.
This is on Windows 10 and a local file system on "C:\...".
Is this expected behaviour? Is there a better way to make Matlab see the new method without "clear classes"?
(One problem with clear classes is that it also clears global variables, and I have one that I want to keep.)
2 个评论
采纳的回答
Graeme Yeo
2023-11-29
This post is a couple of years old now, but this might be useful to someone still looking for an answer...
It seems that in order for the new method to be made visible automatically (without clearing instances of the class from the workspace), it must be added directly to the main class .m file. Obviously the point is that we want the function in a separate file in the class folder, but you can actually add function stubs to your main class file (similar to function prototypes in C++ etc).
So in the OP's example:
Edit @world_t/world_t.m and add the following:
classdef world_t
properties
...
end
methods
%Function stubs
[outputArg1, outputArg2] = run_sim(obj, inputArg1, inputArg2); %Function stub for run_sim function
...
end
end
The function stub should be the same as the first line of the function file, but without the 'function' keyword.
Adding the stub forces the class to get automatically updated to include the new function straight away.
As a side point, when searching for Matlab documentation about using function stubs, I couldn't actually find any reference to them any more, but I was sure they existed, and looked at some of my old code where I did indeed use them. I suppose they are now largely surplus to requirements and just add more lines of code that aren't really needed, hence being removed from the documentation.
Hope this helps someone.
4 个评论
Matt J
2023-11-29
编辑:Matt J
2023-11-29
I found this only happens when you add a new method or property to the class file. If you just add whitespace or a comment, or even modify the code in a function defined in the class file, it does not cause the auto-update to happen.
So, I guess the workaround would be to create some fake, commented-out property in the main class file. Every time you want to update the class, you could:
- Uncomment the property.
- Save.
- Re-comment it.
- Save.
更多回答(1 个)
Matt J
2021-10-24
I don't know if it's intended or not, but my experience is that it only happens when your class is in a @-directory. If you put everything in a single classdef file, it doesn't happen. Also, you might be able to avoid clearing the entire workspace if you do instead,
clear world_t
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Software Development Tools 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!