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!