这是我发现使用Matlab枚举的边缘情况。我正在转换一些在类中使用字符串的旧代码,以实现枚举到适当枚举的功能。现在,当我转换代码时,我有很多这样的例子:
output = [enumVariable ' plus some text'];
(其中enumVariable
的类型为myEnum
):因为我为错误等构建了字符串。但是,由于枚举变量是第一个,因此Matlab尝试将结果字符串转换为{ {1}}输入,给我一个错误:
myEnum
是否有一些容易解决这个问题,或者我是否需要更改每次使用?
Cannot convert an object of class 'char' to enumeration class 'myEnum' because there is no conversion method available.
替换[enumVariable
的每一次使用 - 但我试图避免这项工作。 答案 0 :(得分:2)
你对重载方法的想法是正确的想法,你只是用错误的方法尝试它。你必须重载horzcat
。我建议使用vertcat
实现horzcat
和cat
,而不是仅重载此方法,只重新实现这种更通用的方法。
classdef myEnum
enumeration
Monday, Tuesday, Wednesday, Thursday, Friday
end
methods
function c=cat(obj,d,varargin)
if isa(varargin{1},class(obj)) %do not cast
c=builtin('cat',d,obj,varargin{:});
else %builtin cast
obj2=cast(obj,class(varargin{1}));
c=builtin('cat',d,obj2,varargin{:});
end
end
function c=horzcat(obj,varargin)
c=obj.cat(2,varargin{:});
end
function c=vertcat(obj,varargin)
c=obj.cat(1,varargin{:});
end
end
end
一个简单的演示:
>> enumVariable=myEnum.Monday
enumVariable =
Monday
>> [enumVariable ' plus some text']
ans =
Monday plus some text