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

MATLAB:如何调用继承的抽象类默认方法?括号索引报错

解决MATLAB自定义括号索引时调用父类默认方法的问题

问题原因

matlab.mixin.indexing.RedefinesParen是一个标记类,仅用于声明你的类要重写括号()的索引行为,本身并没有提供可直接调用的parenReference方法。未重写该方法时,MATLAB会使用底层默认索引逻辑;一旦你重写了parenReference,就必须自行实现索引逻辑,无法通过父类调用默认行为。

正确实现方式

如果想保留默认括号索引功能同时扩展逻辑,需要将索引操作转发到类内部的存储对象,通过MATLAB内置函数调用默认索引逻辑。示例代码如下:

classdef Test < matlab.mixin.indexing.RedefinesParen
    properties
        Data % 用于存储默认索引操作的核心数据
        Property1
    end
    methods (Access=protected)
        function varargout = parenReference(obj, indexOp)
            % 转发读取索引操作到Data属性,复用默认逻辑
            varargout = builtin('subsref', obj.Data, indexOp);
            % 在这里添加你的自定义扩展逻辑
        end
        
        function obj = parenAssign(obj, indexOp, varargin)
            % 转发赋值索引操作到Data属性,复用默认逻辑
            obj.Data = builtin('subsasgn', obj.Data, indexOp, varargin{:});
            % 在这里添加你的自定义扩展逻辑
        end
    end
end

官方文档核心要点(翻译)

转发索引操作

  • 自定义索引类时,若要复用MATLAB默认索引行为,需将操作转发到类的内部存储对象(如数组、结构体),通过builtin函数调用subsref(读取)或subsasgn(赋值)实现默认逻辑。
  • 不要尝试直接调用父类的parenReference等方法,标记类中无相关实现。

matlab.mixin.indexing.RedefinesParen类

  • 该类仅作为标记,声明类将重写括号()的索引行为,不提供任何索引方法的具体实现。
  • 继承后若实现parenReference或parenAssign其中一个方法,必须完整实现对应逻辑;若都不实现,MATLAB会沿用默认的subsref/subsasgn逻辑。

内容的提问来源于stack exchange,提问作者Владислав Пинчуков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:22:38