【发布时间】:2015-07-02 17:45:20
【问题描述】:
我想在函数的开头定义一个索引变量,以便随后索引多个向量。索引应指向特定元素(例如元素 nr 3)或向量的最后一个条目。
我希望能够将索引变量设为字符串并对其进行求值。
如果是特定元素,它将是:
idx = '3';
vector1(eval(idx))
vector2(eval(idx))
这行得通。但是对于最后一个元素,该方法失败了:
idx = 'end';
vector1(eval(idx))
vector2(eval(idx))
和eval('end')一样,会抛出如下错误:
错误:非法使用保留关键字“end”。
有谁知道如何设置索引变量的解决方案,以便它可以索引到特定元素或未知大小的向量的最后一个元素?
谢谢!
【问题讨论】:
-
将索引变量设为“字符串”的目的是什么?我不明白仅使用
vector(end)有什么问题。这就是end关键字的用途。您对eval的使用意味着end在不允许时是一个变量。无需将其存储为变量,而且您也不能。这是一个保留关键字。否决我(已删除)的答案无助于解决您的问题。许多其他 MATLAB 用户会问你同样的问题。 -
为什么要将索引变量设为字符串?
-
首先,摆脱字符串索引。其次,使用
length(vector1)或length(vector2)显式构建索引向量。如果这意味着您将无法使用相同的索引向量,请开始考虑其他解决方案,例如索引生成函数。 -
如果真的必须使用
eval,有一种方法。有 Matlab 函数返回向量或数组的长度或大小。但更好:编写一个完全符合您需要的实现,这比使用eval和字符串 (!) 作为索引变量要好。 -
好吧,如果您准备好使用
eval,请充分使用它:idx = 'end'; eval(['vector1(' idx ')'])将运行良好且不会产生错误。我仍然同意其他所有人的观点,这绝对不是要走的路。