Automatically update class properties
    12 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Simon Baeuerle
 am 14 Nov. 2022
  
    
    
    
    
    Kommentiert: Matt J
      
      
 am 16 Nov. 2022
            Hey there,
I've got the following problem: I've got a class with two properties A and B, which dependent on other properties hmatrix and n_FFT. Here is a minimal example:
classdef example
properties
   hmatrix
   n_FFT
   A
   B
end
methods
    function obj = example()
       obj.B       = 10.*2^6;
       obj.hmatrix = [0,1];
       obj.n_FFT   = 2^6;
    end
    function obj = set.hmatrix(obj,value)
          obj.hmatrix = value;
          obj.A = value.*obj.B;
    end
   function obj = set.n_FFT(obj,value)
          obj.n_FFT = value;
          obj.B     = 10.*value;
          obj.A = obj.hmatrix.*obj.B; 
   end
end
end
The property B depends on n_FFT and the property A depends on hmatrix and n_FFT (default values in constructor help when initializing).
Due to performance issues, I only want to recompute B and especially the property A (its more complicated than shown here), if the variables hmatrix and n_FFT change. Otherwise, I could do this by simply writing some get methods for the variables.
 This code above runs, but the code analyzer is complaining that set methods should not access other properties, due to load order issues.
Is there a clean, "proper" way to do this, where I do not use get methods? I looked into dependent and transient properties but could not figure out how to use them without writing get methods, which are called every time. 
Thank you very much! I 
0 Kommentare
Akzeptierte Antwort
  Matt J
      
      
 am 14 Nov. 2022
        
      Bearbeitet: Matt J
      
      
 am 14 Nov. 2022
  
      2 Kommentare
  Matt J
      
      
 am 16 Nov. 2022
				classdef example
properties
   hmatrix_
   n_FFT_
   A_
   B_   
end
properties (Dependent)
   hmatrix
   n_FFT
   A
   B
end
methods
    function obj = example()
       obj.B       = 10.*2^6;
       obj.hmatrix = [0,1];
       obj.n_FFT   = 2^6;
    end
    function obj = set.hmatrix(obj,value)
          obj.hmatrix_ = value;
          obj.A_ = value.*obj.B_;
    end
   function obj = set.n_FFT(obj,value)
          obj.n_FFT_ = value;
          obj.B_     = 10.*value;
          obj.A_ = obj.hmatrix.*obj.B_; 
   end
end
end
Weitere Antworten (0)
Siehe auch
Kategorien
				Mehr zu Call Python from MATLAB finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

