classdef Array
properties
data = [1 2 3];
end
methods
function ind = end(obj, k, n)
ind = length(obj.data) - k;
end
end
end
A=Array()
,如果我们做A(end)
和断点到out = length...
,我们会看到k=1
,但docs说
A(end-1)
与A(ind)
相同,其中
ind = end(A,1,1)
那么A(end)
应该和end(A,0,1)
相同?事实上,k=1
还包括end-1
、end-9
和其他任何类型。
就我覆盖subsref
的目的而言,我只需设置ind = length(obj.data)
,它就可以工作,因此它看起来好像将end
视为常量,例如,end - 1
稍后被处理,但这似乎与文档相反。
1条答案
按热度按时间wfypjpf41#
我同意这个功能的文档不是很清楚。
ind = end(A,k,n)
这些论点如下所述:
A
是对象k
是使用end
语法的表达式中的索引n
是表达式中的索引总数ind
是要在表达式中使用的索引值他们的意思是,
end
出现在k
索引中,n
中。因此,在类似A(end-9)
的索引表达式中,k
和n
都是1,因为end
出现在1个维度中的第一个维度中。对于A(end-1, end+1)
,end
被调用两次,一次使用k=1, n=2
,一次使用k=2, n=2
。根据索引的维度数量,可以使索引操作以不同的方式工作。MatLab中最明显的用法是区分线性索引和多维索引,如果n=1
,则end
返回numel(A)
,而不管A
实际有多少维。无论使用
end
的计算有多复杂,它都应该始终返回给定维度上的元素数(或者更确切地说,返回最后一个元素的索引)。然后,MatLab将在计算中使用返回值。这实际上允许在索引表达式中进行涉及end
的非常复杂的操作,例如A(min(5,end))
。我对
end
操作符的不满之一是索引的类型没有区别,()
或{}
。因此,如果您希望启用end
,则不能让这两个索引操作符执行不同的操作。