我正在尝试为以下情况找到一个很好的解决方案:
我有一个班级:
classdef SomeClass < handle
properties (Access = private)
x
end
methods
function x = getX(this)
x = this.x;
end
end
end
让x
- 一些数据数组。
我是否有可能解决数组中的某些元素,就像我在struct中所做的那样:
struct.x(5)
或者我是否总是这样做?:
myClassObj = SomeClass();
x = myClassObj.getX();
x(5)
或创建一些func getXAt?
答案 0 :(得分:2)
是。像这样的寻址是Matlab对象中属性的正常行为。您可以公开该属性进行阅读,而不是将其完全private
。
classdef SomeClass < handle
properties (SetAccess=private)
x
end
methods
function obj = SomeClass(x)
obj.x = x;
end
end
end
然后你可以像结构上的字段一样解决它。
>> sc = SomeClass(1:7);
>> sc.x(5)
ans =
5
>>
Matlab中没有必要像在Java中一样创建自己的访问器函数。您可以使用属性独立控制属性的读写访问权限。如果您想要更复杂的属性访问逻辑,可以使用特殊的function out = get.x(obj)
语法定义getter和setter,它们的行为将应用于使用obj.x
语法完成的属性访问。
答案 1 :(得分:1)
在Matlab中,任何类都是类的数组。
因此,您可以这样编写课程:
classdef SomeClass < handle
properties (Access = private)
x
end
methods (Access=public)
function this = SomeClass(x)
this.x = x;
end
end
methods
function x = getX(this)
x = [this.x];
end
end
end
并像这样访问:
s(1)= SomeClass(1);
s(2)= SomeClass(5);
s(3)= SomeClass(6);s.getX()
ans =
1 5 6
S(2).getX()
ans =
5