如何在MATLAB中获取枚举类型的名称

7

我在MATLAB中定义了一个枚举类型

classdef(Enumeration) Color < Simulink.IntEnumType
  enumeration
    RED(0),
    GREEN(1),
    BLUE(2),
  end
end

我可以分配它:

>> x = Color.RED    
x = 
    RED

我可以这样显示它:
>> disp(x)
    RED

or like this

>> x.display()
x =
    RED

我如何将那个名称(“RED”)转换为字符串并进行访问?

换句话说,我需要像这样的东西:

s = x.toString()

或者

s = tostring(x)

两者都不起作用。

2个回答

8

您可以使用:

» str = char(Color.RED)
str =
RED
» class(str)
ans =
char

您甚至可以覆盖默认行为:

classdef(Enumeration) Color < int32
 enumeration
  RED(0)
  GREEN(1)
  BLUE(2)
 end

 methods
  function s = char(obj)
   s = ['Color ' num2str(obj)];
   %# or use a switch statement..
  end

  function disp(obj)
   disp( char(obj) )
  end
 end
end

现在:

» char(Color.BLUE)
ans =
Color 2

请注意:由于我没有Simulink,我使用以下定义进行测试:classdef(Enumeration) Color < int32 - Amro
你测试过 str 实际上是什么了吗?我现在无法测试,但我认为这可能只会将枚举类型的 整数表示 转换为一个 char(即 char(0))。 - gnovice
1
@gnovice:它按预期返回了“RED”。 - Amro

0

一个不同的方法,在您的调用实体中通用:

strtrim(matlab.unittest.diagnostics.ConstraintDiagnostic.getDisplayableString(Color.BLUE))

这样你就可以保存disp()和/或char()的类特定实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接