Define shared subfunctions inside a classdef *.m file?
    4 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
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 commentaires
Réponse acceptée
  per isakson
      
      
 le 21 Fév 2011
        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 commentaires
Plus de réponses (1)
  David Young
      
 le 21 Fév 2011
        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 commentaires
  David Young
      
 le 22 Fév 2011
				Agreed - it does depend on the programming context. Also, I see I can't count. Oh well...
Voir également
Catégories
				En savoir plus sur Handle Classes dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



