假设我有以下课程:
classdef myClass < handle
properties
A = 1
end
methods
function obj = myClass(val)
obj.A = val;
end
end
end
假设我实例化了这个类的一个实例,然后稍微操作它,然后复制它由于它是一个句柄类,“copy”实际上只是同一对象的另一个实例:
>> q = myClass(10);
>> q.A = 15;
>> w = q;
>> disp(w.A)
15
但我想看
A
而不需要实例化myClass天真地做>> value = w.A
不起作用,因为这只是复制值;稍后的changning
w.A
不会更改value
。有没有办法在不创建单独句柄类的情况下为
w.A
提供“指针”或“引用”我宁愿保留符号w.A
而不是类似于w.A.value
的东西(我必须创建handle类来包含该值)。编辑:我使用此功能是为了帮助封装我的代码,以便与我的研究实验室一起使用。我正在设计MATLAB和Arduino之间的接口,以控制空中和地面车辆;我希望访问诸如“
vehicle.pwmMax
”、“vehicle.flightCeiling
”等内容,以封装底层对象“vehicle.Globals.pwmMax.value
”等。 最佳答案
你可以通过一个PropertyReference类来实现
classdef PropertyReference < handle
%PropertyReference Reference to a property in another object
properties
sourceHandle
sourceFieldName
end
properties (Dependent = true)
Value
end
methods
function obj = PropertyReference (source, fieldName)
obj.sourceHandle = source;
obj.sourceFieldName = fieldName
end
function value = get.Value( obj )
value = obj.sourceHandle.(obj.sourceFieldName);
end
function set.Value( obj, value )
obj.sourceHandle.(obj.sourceFieldName) = value;
end
function disp( obj )
disp(obj.Value);
end
end
end
继续您的示例,然后可以使用PropertyReference,如下所示:
q = myClass(10);
>> q.A = 15;
>> ref = PropertyReference(q,'A');
>> disp(ref)
15
>> q.A = 42;
>> disp(ref)
42
PropertyReference类的使用有点尴尬,但原始类保持不变。
编辑-根据strictlyrude27注释添加disp函数重载