为什么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。
答案 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
被调用。