How to make user-defined type pass as numeric?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Naor Movshovitz
el 10 de Oct. de 2015
Comentada: Geoff Hayes
el 10 de Oct. de 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 comentarios
Respuesta aceptada
Geoff Hayes
el 10 de Oct. de 2015
Editada: Geoff Hayes
el 10 de Oct. de 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 comentarios
Geoff Hayes
el 10 de Oct. de 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.
Más respuestas (0)
Ver también
Categorías
Más información sobre Construct and Work with Object Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!