Arrays Matlab中的非标量枚举

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

是否可以有非标量的枚举成员

例如,在不使用方法的情况下,如何枚举颜色,使每种颜色都是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在每个脚本/函数中。

我不确定您在这里要问什么,但我认为主要的答案是您目前做的基本上是正确的(尽管我建议做一些小的更改)

您当然可以拥有枚举值的非标量数组-例如,使用您的类,您可以创建
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