Arrays Matlab中的非标量枚举
是否可以有非标量的枚举成员 例如,在不使用方法的情况下,如何枚举颜色,使每种颜色都是1x3双色(如绘图所需) 使用下面的类定义Arrays Matlab中的非标量枚举,arrays,matlab,vector,colors,enumeration,Arrays,Matlab,Vector,Colors,Enumeration,是否可以有非标量的枚举成员 例如,在不使用方法的情况下,如何枚举颜色,使每种颜色都是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 f
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代码>在每个脚本/函数中。我不确定您在这里要问什么,但我认为主要的答案是您目前做的基本上是正确的(尽管我建议做一些小的更改)
您当然可以拥有枚举值的非标量数组-例如,使用您的类,您可以创建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
这样,您可以传入一个n
颜色数组,它将输出一个n
-by-3 RGB值数组。例如,您可以说mycolors=[color.red,color.green];mycolors.toRGB
您将得到[1,0,0;0,1,0]
希望有帮助 我希望能有颜色3的解决方案。。。但是你对我的例子的改进真的很感激!谢谢
function rgb = toRGB(c)
rgb = [[c.R]', [c.G]', [c.B]'];
end