How to make user-defined type pass as numeric?
    2 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Naor Movshovitz
      
 le 10 Oct 2015
  
    
    
    
    
    Commenté : Geoff Hayes
      
      
 le 10 Oct 2015
            Suppose I have a defined type that behaves like a number. I would like it to pass the test:
validateattributes(x, {'numeric'}, {})
It's not enough, apparently, to overload the function isnumeric.m. What else needs to be done?
Thanks, n
0 commentaires
Réponse acceptée
  Geoff Hayes
      
      
 le 10 Oct 2015
        
      Modifié(e) : Geoff Hayes
      
      
 le 10 Oct 2015
  
      Naor - try overloading the isa function instead. For example, let's suppose that the following class is "numeric".
classdef MyNumberClass
   properties
      x
   end
   methods
        function obj = MyNumberClass(varargin)
           if nargin > 0
              obj.x = 42;
           else
              obj.x = 99;
           end
        end
        function [result] = isa(obj,typeStr)
           result = false;
           if strcmpi(typeStr,'numeric') || strcmpi(typestr,'MyNumberClass')
              result = true;
           end
        end
     end
  end
Then in the Command Window, try the following
 myInstance = MyNumberClass;
Now try to validate it as
 validateattributes(myInstance, {'numeric'}, {})
No error is thrown and so the object is considered to be numeric. Note that you would need to overload isnumeric so that that function "passes" too.
2 commentaires
  Geoff Hayes
      
      
 le 10 Oct 2015
				Naor - I've updated the solution with your suggestion. As for including your class in the error output, I'm not sure how that can be done.
Plus de réponses (0)
Voir également
Catégories
				En savoir plus sur Data Type Identification 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!

