【问题标题】:Using Matlab Enumerations使用 Matlab 枚举
【发布时间】:2016-05-18 15:22:11
【问题描述】:

这是我发现的一个使用 Matlab 枚举的极端情况。我正在将一些在类中使用字符串来实现枚举功能的旧代码转换为正确的枚举。现在,当我转换该代码时,我有很多这样的例子:

output = [enumVariable ' plus some text'];

(其中enumVariablemyEnum 类型):当我为错误等建立字符串时。但是,由于枚举变量是第一个,Matlab 试图将结果字符串转换为myEnum 类型,给我一个错误:

Cannot convert an object of class 'char' to enumeration class 'myEnum' because there is no conversion method available.

是否有一些容易解决的方法,还是我必须更改每个用法?

  • 我考虑过为 myEnum 重新定义“char()”函数,但不是这样 - 我不想以频率对象结束。
  • 我当然可以用[char(enumVariable) 替换每次使用[enumVariable - 但我试图避免这种工作。

【问题讨论】:

  • 我无法重现您收到的错误消息。请添加一个完整的示例以将问题重现到问题中。
  • 好的,我知道了,具体报错信息取决于构造函数。

标签: matlab


【解决方案1】:

您重载方法的想法是正确的想法,您只是用错误的方法尝试了它。你必须超载horzcat。我建议不要只重载这个方法,而是使用cat 实现vertcathorzcat,并且只重新实现这个更通用的方法。

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

【讨论】:

  • 唯一的问题是我不能拥有这个枚举的数组,但我想不出我想要的情况,所以没有任何损失。谢谢!!
猜你喜欢
  • 2023-03-31
  • 2012-03-22
  • 2014-10-17
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 2012-01-30
  • 1970-01-01
相关资源
最近更新 更多