它们看起来完全相同,就像:
>> v1 = [5];
>> v2 = 5;
>> isequal(v1, v2)
ans =
1
>> [5] * [1,2,3]
ans =
5 10 15
>> v1(1)
ans =
5
>> v2(1)
ans =
5
有什么区别我需要注意吗?
谢谢。
它们看起来完全相同,就像:
>> v1 = [5];
>> v2 = 5;
>> isequal(v1, v2)
ans =
1
>> [5] * [1,2,3]
ans =
5 10 15
>> v1(1)
ans =
5
>> v2(1)
ans =
5
有什么区别我需要注意吗?
谢谢。
我应该注意到有什么不同吗?
没有。
虽然没有显著差异,但是确实存在差异。
v1=5;
创建了一个名为v1
的变量,其值为5。
v1=[5];
定义了一个值为5的矩阵/标量;然后将该矩阵与空值拼接 - 拼接是由方括号执行的操作,这也是为什么需要使用它们来定义[1,2,3]
的原因 - 然后将结果赋给变量v1
。因此,使用方括号会执行额外的操作。
这就是为什么如果您在编辑器中编写代码,您会收到一个m-lint消息,其中说:
使用方括号[]是不必要的。如有需要,请使用括号进行分组。
[5]
和 5
没有区别。但是通常情况下,一个表达式[f]
和 f
(其中 f
是某个表达式)之间可能会有区别。以下是一个例子:
c = {10,20,30,40,50,60};
x = c{1:3}
y = [c{1:3}]
在这个例子中,变量 c
是一个单元格数组,所以操作 c{1:3}
返回从 c
的位置 1 到 3 中的所有对象作为逗号分隔列表,换句话说,它返回值为 10,20,30
。它不会返回数组 [10,20,30]
。因此,命令 x = c{1:3}
等同于 x=10,20,30
,它等同于将 x
的值赋为 10
,然后对字面量 20
和 30
不做任何处理。另一方面,命令 y = [c{1:3}]
将逗号分隔列表括在方括号 []
中,因此等同于 y=[10,20,30]
。最后,变量 x
的值为 10
,而变量 y
的值为 [10,20,30]
。