Define shared subfunctions inside a classdef *.m file?
1 次查看(过去 30 天)
显示 更早的评论
I want to define a relatively small class (small enough that it makes sense to do everything inside of one file). I want to reuse a common subfunction between several methods, and having this subfunction inside of the classdef would make it cleaner, easily portable and automatically private. However, I have not been able to do so. Is there any way to accomplish it?
>> d = dummy;
>>??? Undefined function or variable 'my_pi'.
>>
>>Error in ==> dummy>dummy.dummy at 10
>> obj.dummy = my_pi();
dummy.m:
classdef dummy
properties
value;
end
methods
function y = my_pi()
y = 3.141592;
end
function obj = dummy()
obj.dummy = my_pi();
end
end
end
0 个评论
采纳的回答
per isakson
2011-2-21
You can define subfunctions in the same file after the definition of the class, ie
classdef dummy
...
...
end % classdef
function out = subfun1( in )
...
end
/ per
0 个评论
更多回答(1 个)
David Young
2011-2-21
Non-static methods require an object as the first argument, and as my_pi is not declared static and doesn't have an argument, it isn't found.
Rather than putting my_pi at the end of the file, I would include it properly in the class by declaring it to be static:
classdef dummy
properties
value;
end
methods
function obj = dummy()
obj.value = dummy.my_pi();
end
end
methods (Static)
function y = my_pi()
y = 3.141592;
end
end
end
You need to use the class name in the call to the static method. I've also corrected the assignment in the constructor: I assume that you intented to set the value property.
You could also set my_pi's access to private if you want it only to be visible from other methods of the class.
8 个评论
David Young
2011-2-22
Agreed - it does depend on the programming context. Also, I see I can't count. Oh well...
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Environment and Settings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!