matlab中 1 10 end,Matlab中“end”的语义是什么?

通常使用end关键字作为在Matlab中访问或扩展数组的快捷方式,如同

>> x = [1,2,3];

>> x(1:end-1)

ans =

1 2

>> x(end+1) = 4

x =

1 2 3 4

但是,我惊讶地发现以下内容也起作用

>> x(1:min(5, end))

ans =

1 2 3 4

我认为这可能是一个特殊的形式,如:可以特别的索引操作,所以我创建了一个类来检测这个

classdef IndexDisplayer

methods

function subsref(self, s)

disp(s);

end

end

end

您可以在以下示例中看到如何:特殊套装

>> a = IndexDisplayer;

>> a(1:3)

type: '()'

subs: {[1 2 3]}

>> a(:)

type: '()'

subs: {':'}

但是,当我索引结束时,我看到

>> a(end)

type: '()'

subs: {[1]}

这里的最后被替换为1. 1来自哪里?我的第一个猜测是,索引表达式x(end)中的任何结尾将被替换为对length(x)的调用,所以我尝试覆盖长度

classdef IndexDisplayer

methods

function subsref(self, s)

disp(s);

end

function len = length(self)

len = 10;

end

end

end

但是,这给了

>> a = IndexDisplayer;

>> length(a)

ans =

10

>> a(end)

type: '()'

subs: {[1]}

使理论走出窗外。任何人都可以解释结束语义吗?

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值