是否可以使枚举成员为非标量?
例如,如何在不使用方法的情况下枚举颜色,使每种颜色为1x3双(根据情节需要)?
使用以下类定义
classdef color
properties
R, G, B
end
methods
function c = color(r, g, b)
c.R = r;
c.G = g;
c.B = b;
end
function g = get(c)
g = [c.R, c.G, c.B];
end
end
enumeration
red (1, 0, 0)
green (0, 1, 0)
end
end
我可以写color.green.get()
来获取[0 1 0]
,但我希望color.green
能够使代码更清晰。
另一种解决方案可能是将color
设置为全局结构,但它不实用,因为全局变量会导致混淆,我必须在每个脚本/函数中编写global color;
。
答案 0 :(得分:1)
我不确定你在这里问的是什么,但我认为主要的答案是你现在做的基本上是正确的事情(虽然我建议一些小的变化)。
您当然可以拥有枚举值的非标量数组 - 例如,您可以使用您的类创建mycolors = [color.red, color.green]
。您还可以使用非标量属性进行枚举,例如:
classdef color2
properties
RGB
end
methods
function c = color2(r, g, b)
c.RGB = [r,g,b];
end
end
enumeration
red (1, 0, 0)
green (0, 1, 0)
end
end
然后你可以说color2.red.RGB
并且你得到[1,0,0]
。
但我猜这些都不是你想要的。我想象你想要的东西,不幸的是你明确地不能做的事情,就像这样:
classdef color3 < double
enumeration
red ([1,0,0])
green ([0,1,0])
end
end
然后您只需输入color3.red
,即可获得[1,0,0]
。你不能这样做,因为当枚举从内置继承时,它必须是一个标量。
就我个人而言,我基本上会做你正在做的事情,但不是打电话给你的方法get
我会称之为toRGB
,所以你要说color.red.toRGB
,这感觉很自然(特别是如果你也给它一些其他方法,如toHSV
或toHex
)。我也稍微修改它,以便它可以接受颜色数组:
function rgb = toRGB(c)
rgb = [[c.R]', [c.G]', [c.B]'];
end
通过这种方式,您可以传入n
颜色数组,并输出n
- 3个RGB值数组。例如,您可以说mycolors = [color.red, color.green]; mycolors.toRGB
,然后获得[1,0,0;0,1,0]
。
希望有所帮助!