MATLAB中继承double类新增属性后,如何便捷访问数值及重新赋值?
关于MATLAB自定义double子类的数值获取与修改问题
一、快速获取纯数值
想要拿到不含额外属性的实际数值,直接用double()函数把自定义类实例转成标准double类型就行,示例:
x = myDouble(2, 'string'); pure_val = double(x); % pure_val 就是纯数值2
不管是单独取值还是后续要基于原数值重新赋值,这个方法都能用。
二、修改数值不必重新创建带原有属性的实例
你示例里直接写x = 3后,实例保留了原有string属性,这是MATLAB对double子类的隐式转换特性,但这种行为依赖构造函数的兼容性,不是所有场景都可靠。更稳妥的方式是在类里加一个专门的数值更新方法,既能修改数值又保留原有属性:
完善后的类定义
classdef myDouble < double properties string end methods function obj = myDouble(val, s) % 兼容多种输入的构造函数 switch nargin case 2 obj = obj@double(val); % 初始化底层double数值 obj.string = s; case 1 if isnumeric(val) obj = obj@double(val); obj.string = ''; elseif ischar(val) obj = obj@double(0); obj.string = val; end end end function obj = updateValue(obj, new_val) % 自定义数值更新方法,保留string属性 obj = obj@double(new_val); end end end
使用示例
x = myDouble(2, 'string'); x = x.updateValue(3); % 此时x的数值变为3,string属性还是'string'
如果想让x = 3这种直接赋值也自动保留属性,可以重载subsasgn运算符,但实现起来稍复杂,上面的自定义方法更简单直观。
内容的提问来源于stack exchange,提问作者robbie crockett
相关产品推荐
相关产品推荐

