Matlab subsref和end
我有一个自定义矩阵类,我希望能够将其索引为:Matlab subsref和end,matlab,operator-overloading,Matlab,Operator Overloading,我有一个自定义矩阵类,我希望能够将其索引为: x = myobj(1,2).d(3,4) % myobj(1,2,3,4) x = myobj(2, 3).d(3, end) % myobj(1,3,1,end) 我希望这些也能完成任务 我从以下几点开始: class MyClass < double methods function obj = MyClass(x) obj = obj@double(x); end function ob
x = myobj(1,2).d(3,4) % myobj(1,2,3,4)
x = myobj(2, 3).d(3, end) % myobj(1,3,1,end)
我希望这些也能完成任务
我从以下几点开始:
class MyClass < double
methods
function obj = MyClass(x)
obj = obj@double(x);
end
function obj = subsref(obj, s)
varargout{:} = subsref@double(obj, subsintercept(obj, s));
end
function obj = subsasgn(obj, s, b)
obj = subsasgn@double(obj, subsintercept(obj, s), b);
end
end
end
我得到了这种预期的行为
>> myobj = MyClass(zeros(1,2,3,4))
>> myobj(1,2).d(3,4)
subsintercept
type: '()'
subs: {[1] [2]}
type: '.'
subs: 'd'
type: '()'
subs: {[3] [4]}
<error due to not having finished subsintercept yet>
>myobj=MyClass(零(1,2,3,4))
>>myobj(1,2).d(3,4)
副业
类型:“()”
subs:{[1][2]}
类型:'.'
潜艇:“d”
类型:“()”
subs:{[3][4]}
但这出乎意料
>> myobj(1,2).d(3,end)
subsintercept
type: '()'
subs: {[1] [2]}
type: '.'
subs: 'd'
<error due to not having finished subsintercept yet>
>myobj(1,2).d(3,end)
副业
类型:“()”
subs:{[1][2]}
类型:'.'
潜艇:“d”
end
会导致我没有收到3
一些测试表明:
result = myobj(1,2).d(3,end)
翻译为:
end_ = str2func('end');
d_temp = subsref(myobj, substruct('()', {1 2}, '.', 'd'));
ei = end_(d_temp, 2, 2);
result = subsref(myobj, substruct('()', {1 2}, '.', 'd', '()', {3, ei}));
i、 例如,subsref
被调用两次*
*令人惊讶的是,在第二次测试中,并不是像subsref(d_temp,substruct(“()”,{3,ei}))那样
result = myobj(1,2).d(3,end)
翻译为:
end_ = str2func('end');
d_temp = subsref(myobj, substruct('()', {1 2}, '.', 'd'));
ei = end_(d_temp, 2, 2);
result = subsref(myobj, substruct('()', {1 2}, '.', 'd', '()', {3, ei}));
i、 例如,subsref
被调用两次*
*令人惊讶的是,第二次
subsref(d_temp,substruct(“()”,{3,ei}))
。d
是动态属性还是什么?@Suever:d
不存在。该类是double
的子类。除了一个无趣的构造函数之外,没有其他属性或方法。我现在已经为所有这些添加了样板,但我认为它阻碍了清晰性,因为d
不存在,MATLAB无法将end
转换为任何有用的东西。你希望end
产生什么结果?@Suever:我希望我能通过某种end
对象。你能提供一些关于你的类的更多信息吗。d
是动态属性还是什么?@Suever:d
不存在。该类是double
的子类。除了一个无趣的构造函数之外,没有其他属性或方法。我现在已经为所有这些添加了样板,但我认为它阻碍了清晰性,因为d
不存在,MATLAB无法将end
转换为任何有用的东西。你希望end
产生什么结果?@Suever:我希望我能通过某种end
对象我想这是有意义的,因为myobj(1,2).d
需要先解决,然后才能决定如何处理end
。也许值得对其进行一些充实,以使其更清楚地说明如何编写subsref
来处理此问题。@suever:我会在着手实现它时这样做。似乎我在d
中需要某种类型的代理对象,我想这是有意义的,因为myobj(1,2)。d
需要先解析,然后才能确定如何处理结束。也许值得对其进行一些充实,以使其更清楚地说明如何编写subsref
来处理此问题。@suever:我会在着手实现它时这样做。似乎我需要d