假设我有以下课程:
classdef myClass < handle
properties
A = 1
end
methods
function obj = myClass(val)
obj.A = val;
end
end
end
假设我实例化这个类的一个实例,然后稍微操作它,然后复制它。由于它是一个句柄类,因此“副本”实际上只是same object:
>> q = myClass(10);
>> q.A = 15;
>> w = q;
>> disp(w.A)
15
但我想看A
无需实例化 myClass。天真地做着
>> value = w.A
不起作用,因为这只是复制值;长宁w.A
以后不会改变value
.
有没有办法提供“指针”或“引用”w.A
无需创建单独的句柄类?我宁愿保留符号w.A
而不是类似的东西w.A.value
(我必须创建句柄类来包含该值)。
编辑:我使用此功能是为了帮助封装我的代码以供我的研究实验室使用。我正在设计 MATLAB 和 Arduino 之间的接口来控制空中和地面车辆;我希望访问诸如“vehicle.pwmMax
", "vehicle.flightCeiling
”等来封装底层对象:“vehicle.Globals.pwmMax.value
", etc.
您可以通过 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 类的用法有点尴尬,但原始类保持不变。
编辑 - 根据严格粗鲁的 27 条评论添加了 disp 函数重载
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)