重载的subsref部分失败
5视图(30天)
显示旧的评论
你好,
我想创建一个数组类通用的维度。所以我想过载subsref索引。工作主要是一见钟情,现在遇到奇怪的行为,这个最小的例子所示:
Main.m:
ThisArray = MyArray;
ThisArray (:)% < - - - - -这是很好
ThisArray.ChangeArray;
ThisArray (:)% < - - - - -这是很好
MyArray.m:
classdefMyArray <处理
属性
MainArray
结束
方法
函数obj = MyArray
obj。MainArray = [1 2;3 4];
结束%函数MyArray
函数sref = subsref (obj,年代)
开关(1).type
情况下“()”
sref = obj.MainArray (s (1) .subs {:});
否则
sref =内装式(“subsref”obj,年代);
结束%开关
结束%函数subsref
函数obj = ChangeArray (obj)
obj.MainArray (1) = obj.MainArray (1) + 1;
obj (:)% < - - - - - -这一次只显示对象
NewArray = MyArray;
NewArray (:)% < - - - - - -这一次只显示对象
结束%函数ChangeArray
结束
结束
从主要工作正常运行这个主要都标志着MainArray出现输出想要的。但是当我叫ChangeArray subsref过载不工作了。都试图使用重载索引输出对象,表明我的重载subsref不是反应,(:)只是忽略。断点在subsref开关没有这个函数的输入有问题的场合。
为什么我不能在这个对象中使用这些指数的方法。
注::我喜欢的句柄继承类,但是删除它似乎没有发挥作用。
感谢任何帮助。
0评论
接受的答案
马特·J
2016年10月27日
编辑:马特·J
2016年10月27日
SUBSREF不是由索引表达式classdef内部文件。在classdef,您必须显式地调用subsref如果您想要执行:
函数obj = ChangeArray (obj)
obj.MainArray (1) = obj.MainArray (1) + 1;
S =结构(“类型”,“()”,“潜艇”,{“:”});
subsref (obj, S)
NewArray = MyArray;
subsref (NewArray S)
结束%函数ChangeArray
这是为了让你使用索引表达式内subsref方法没有它们引发无限递归调用链subsref方法本身。