You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:01:13