Matlab`openvar`接受转置-有时(?!?)

时间:2018-07-13 21:04:43

标签: matlab

为什么Matlab的openvar有时会拒绝使用转置?

x = { 'alpha' 'bravo'}
a.x = { 'alpha' 'bravo'}

openvar('x''')
% Error:
% The first argument to VariableEditor must be a valid variable name.

openvar('a.x''')
% Works

openvar('x.''')
% Works

我正在使用R2015b。

1 个答案:

答案 0 :(得分:1)

接受openvar('x.''')和 使用openvar('x''')可以看到拒绝dbstop if error。 然后发出openvar('x''')表明错误是由于类别 VariableEditor的方法checkVariableName。它检查openvar的 通过在任意点或方括号/大括号的左侧查找字符串参数。 对于参数x.',这是x -代码将其视为一个好方法 变量名。在没有圆点或方括号的情况下,它会检查整个 表达式,即x',并且代码无法将其识别为 好的变量名。

尽管这显示了代码如何引起以下描述的行为 原始帖子,更高层次的推理并不明显- 尤其是如果openvar可以评估和呈现移调,如 原始帖子显示。也许TMW仅将参数限制为变量名,因为 太复杂而无法支持所有表达式。也许他们 只是没有费心去捕获所有可能的非变量名称 表达式。 Cris Luengo指出openvar('cos(pi)')通过了 测试,但变量编辑器窗口打开,并显示“变量 cos(pi)不存在。”

无论如何,了解如何摆放数据以进行显示非常有用 因为在很多情况下(i)我想要/具有行向量,但是 (ii)我想将其视为一列。

第(i)项的原因似乎是历史的和实际的。发行 clear x; x(3)=7默认为 row 数组,即沿 第二维度,而不是第一维度(向下)。这个 实用,因为它允许命令窗口显示大量信息 不会滚动太多,因此保留了很多前面的信息 进行查看(这可以追溯到变量编辑器之前的时间)。 此外,矢量需要水平才能迭代项目 在成语for myIterator = VectorOfItems中,使其成为 “前进”方向。

第(ii)项的原因再次是可行的。散布东西 在变量编辑器中水平显示很难看清,因为 默认水平间距太宽。您看不到很多 可用的宽度,在认知上很难理解 像这样过分间隔的数据数组。观看这样的 数据作为列向量更有意义,而历史 第(i)项后面的注意事项不适用,因为它不在 滚动命令窗口的上下文。同样,在变量中 编辑器,我们可以水平平铺窗口以用于不同的调用 openvar,因此显示列数据不会浪费空间。 在滚动命令窗口中。

旁边::这种搜索到openvar代码中的练习 为dbstop指定函数时出现了怪异现象。例如,如果您 从错误消息中指定checkVariableName的完整路径, 没有设置断点。您必须发出dbstop if error,然后提交 openvar的不可接受的参数以引起错误, 在编辑器中打开checkVariableName代码。只有这样 您可以使用GUI编辑器在checkVariableName中设置断点,或者 在堆栈中上一层并设置一个断点 checkVariableName被调用。