使用Matlab枚举

时间:2016-02-08 20:19:13

标签: matlab

这是我发现使用Matlab枚举的边缘情况。我正在转换一些在类中使用字符串的旧代码,以实现枚举到适当枚举的功能。现在,当我转换代码时,我有很多这样的例子:

output = [enumVariable ' plus some text'];

(其中enumVariable的类型为myEnum):因为我为错误等构建了字符串。但是,由于枚举变量是第一个,因此Matlab尝试将结果字符串转换为{ {1}}输入,给我一个错误:

myEnum

是否有一些容易解决这个问题,或者我是否需要更改每次使用?

  • 我考虑过为myEnum重新定义“char()”函数,但事实并非如此 - 我不想以频率对象结束。
  • 我当然可以用Cannot convert an object of class 'char' to enumeration class 'myEnum' because there is no conversion method available. 替换[enumVariable的每一次使用 - 但我试图避免这项工作。

1 个答案:

答案 0 :(得分:2)

你对重载方法的想法是正确的想法,你只是用错误的方法尝试它。你必须重载horzcat。我建议使用vertcat实现horzcatcat,而不是仅重载此方法,只重新实现这种更通用的方法。

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