【发布时间】:2013-12-01 00:31:16
【问题描述】:
是否可以在 Matlab 中增加一个变量的值而不在语句的右侧重新声明它?
【问题讨论】:
-
我不这么认为。你试过了吗?
是否可以在 Matlab 中增加一个变量的值而不在语句的右侧重新声明它?
【问题讨论】:
AFAIK,MATLAB 中没有这样的东西。
这是understandable(请看 Steven Lord 的回答,帖子 11)。
那篇文章表明,由于 MATLAB 是基于数组的,因此这样的运算符充其量是模棱两可和不直观的。
【讨论】:
X op= e 表示 X = (X) op e,但只计算一次 X,就像在 C、C++、Java、C# 等中一样。Octave 支持这些的事实证明没有根本的歧义。
a([1 1 1]) 已经存在更大的歧义问题,因为它可以被解释为索引向量或逻辑向量。 a([1 2 1]) 是一个更好的例子,但只有与其他语言一致的解释。 (抱歉,我第一次查看该讨论时只阅读了 10 条帖子)
a([1 1 1]) 是明确的:它是数字索引,因为文字“1”在 Matlab 中是双精度数,并且 Matlab 不会在索引上下文中转换为逻辑。 a([true true true]) 将是逻辑索引。除此之外,Ben Voigt 的评论完全有道理:+= 是一个简单的句法速记。 Steven Lord 的帖子并没有真正解释它。 Lord 引用的奇怪边缘案例已经在 Matlab 中以X = (X) op e 形式出现。例如。 a = 1; a([1 1 1]) = a([1 1 1]) + a(1); 已经有行为。或者试试a = 1; a([1 1 1]) = a(1) + [2 3 4];。 (它给了我 5 个。)添加 += 不会让情况变得更糟。
X = X op e 代码是a = 1; a([1 1 1]) = a([1 1 1]) + [2 3 4]。在 R2009b 中给我 5。
MatLab 没有复合赋值,但开源克隆 Octave 有。
【讨论】: