MATLAB自定义类如何控制size与length?重载方法及魔法方法咨询
MATLAB类中控制
size/length返回值及魔法方法说明 1. 控制size(d)和length(d)的实现方式
重载size方法
可以直接在类中重载size函数,自定义返回值。比如根据data属性的尺寸返回对应结果,也支持处理指定维度的参数:
classdef Dog properties data % 存储数据的属性 end methods function sz = size(obj, varargin) if isempty(obj.data) sz = [0 0]; % 空对象的默认size else if nargin == 1 sz = size(obj.data); else sz = size(obj.data, varargin{1}); end end end end end
实现length(d) == 3的需求
length函数默认取max(size(obj)),直接重载length方法更直观,也可搭配size重载保证行为一致性:
classdef Dog properties data end methods function len = length(obj) if isempty(obj.data) len = 0; else len = length(obj.data); end end function sz = size(obj, varargin) if isempty(obj.data) sz = [0 0]; else sz = size(obj.data, varargin{:}); end end end end
测试验证:
d = Dog(); d.data = [1,2,3]; length(d) % 返回3 size(d) % 返回[1 3]
2. MATLAB常用“魔法方法”(控制类交互的内置函数)
这些函数用于自定义类的核心交互行为,常见的包括:
subsref:控制下标引用(如d(1)、d.field)subsasgn:控制下标赋值(如d(1) = val、d.field = val)disp:自定义对象在命令行的显示内容char/string:实现对象到字符/字符串类型的转换plus/minus等:重载+、-等算术运算符行为eq/ne等:重载==、~=等比较运算符逻辑numel:控制对象的元素总数返回值subsindex:允许对象作为数组下标使用(如A(d))transpose/ctranspose:自定义转置(.')和共轭转置(')行为
注意:这些方法需在类的methods块中定义,参数与返回值要遵循MATLAB内置函数的规范。
内容的提问来源于stack exchange,提问作者OverLordGoldDragon
相关产品推荐
相关产品推荐

