我想创建一个Matlab枚举类,其方法是根据每个枚举的对应数值从表中查找值。这就是我所拥有的:
classdef testclass < uint8
enumeration
enum1 (1)
enum2 (2)
enum3 (3)
end
A = [100 200 300;101 202 303;111 222 333];
methods
function retval = getval(obj1,obj2)
retval = testclass.A(obj1,obj2);
end
end
end
到目前为止,我已经尝试过:
不继承uint8的属性,而向类中添加properties
块,其矩阵A为常数,而矩阵B为常数。每个枚举对应的数字。我收到一个错误消息,说第一个枚举(大概也是每个枚举)在其定义中有太多参数。
上面的代码。我在包含A的行上收到一条错误消息,说这是一个意外的MATLAB表达式。
不要从uint8继承属性并添加两个properties
块,因为如果我定义两个属性,Matlab会为每个枚举定义期望两个参数。第一个properties
块是Constant,第二个块在“ properties”之后没有任何内容。这也不起作用。
在getval
函数内部定义矩阵A。这可行,但是我希望A可供类中的其他方法使用。
如何定义该类中每个方法可用的变量?
答案 0 :(得分:0)
我发现您的代码存在三个问题。
我想这就是你所追求的:
>> en = getval.enum1
>> en.a
ans =
1x3 uint16 row vector
101 202 303
>> en.a*2
ans =
1x3 uint16 row vector
202 404 606
classdef getval
enumeration
enum1 (1)
enum2 (2)
enum3 (3)
end
properties
a
end
methods
function retval = getval(a)
A = uint16([100 200 300;101 202 303;111 222 333]);
retval.a = A(a,:);
end
end
end
答案 1 :(得分:0)
或者,
>> en = getval.enum1
>> en.A
ans =
1x3 uint16 row vector
101 202 303
>> en.A*2
ans =
1x3 uint16 row vector
202 404 606
classdef getval
enumeration
enum1 (100,200,300)
enum2 (101,202,303)
enum3 (111,222,333)
end
properties
A
end
methods
function retval = getval(a,b,c)
retval.A = uint16([a,b,c]);
end
end
end
答案 2 :(得分:0)
不幸的是,您无法在继承的枚举类上定义属性。您可以改为在枚举类上定义一个函数(例如“ double”),该函数将返回一些基础值。然后,您可以使用此值引用常量。请参见以下示例:
班级:
classdef testclass
enumeration
enum1
enum2
enum3
end
properties(Constant)
A = [100 200 300;101 202 303;111 222 333];
end
methods
function retval = getval(obj1,obj2)
retval = testclass.A(double(obj1),double(obj2));
end
function retval = double(obj)
if obj == testclass.enum1
retval = 1;
elseif obj == testclass.enum2
retval = 2;
elseif obj == testclass.enum3
retval = 3;
end
end
end
end
运行:
A = testclass.enum1
B = testclass.enum2
getval(A,B)