MATLAB: How to make user-defined type pass as numeric

input parsingoop

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

Best Answer

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.