为什么在 MATLAB 中允许使用多个连续的加号语法?
Why are multiple, consecutive plusses allowable syntax in MATLAB?
有谁知道为什么这在 MATLAB 中有效?
>> 1 ++ 2
ans =
3
来自 C 语言的编码,python,Java 等,我发现这应该有效是最违反直觉的。大概有一些关于解析器的重要信息我不明白?
plus
and uplus
有区别。我怀疑 MATLAB 将第一个 +
作为 plus
,将所有其他的作为 uplus
。由于 uplus
默认只是 "return what's behind",您添加 1
和 2
,并在两者之间使用很多 "return what's behind"。
a=2;
c=+a % unitary plus
c =
2
1+2 % addition
ans =
3
1+++2 % addition and two uplusses
ans =
3
uplus
存在的原因是允许 类 中的运算符重载。同样适用于其他语言,例如in C#,以允许运算符在受限 类.
中重载
该 C# 线程中提到的另一个原因是将无符号短整型更改为整数,而 MATLAB 并非如此:
d=uint8(1)
d =
uint8
1
+d
ans =
uint8
1
a=+d
a =
uint8
1
但是,它确实将布尔值转换为双精度值,感谢 指出:
+true
ans =
1
+false
ans =
0
然而,以下内容对我来说仍然是个谜,灵感来自 :
>> [1 ++ 2]
ans =
1 2 % Two unary plusses
>> [1 + + 2]
ans =
3 % A normal plus and a unary one
>> [1++2]
ans =
3 % A normal plus and a unary one
同样适用于多个加号,[1 +++..+++ 2]
,因此所有加号在中间连续生成 [1 2]
,所有其他组合(据我测试)导致 3
.我问了一个关于这个的单独问题:Why do the plus and unary plus behave strange in array syntax?
有谁知道为什么这在 MATLAB 中有效?
>> 1 ++ 2
ans =
3
来自 C 语言的编码,python,Java 等,我发现这应该有效是最违反直觉的。大概有一些关于解析器的重要信息我不明白?
plus
and uplus
有区别。我怀疑 MATLAB 将第一个 +
作为 plus
,将所有其他的作为 uplus
。由于 uplus
默认只是 "return what's behind",您添加 1
和 2
,并在两者之间使用很多 "return what's behind"。
a=2;
c=+a % unitary plus
c =
2
1+2 % addition
ans =
3
1+++2 % addition and two uplusses
ans =
3
uplus
存在的原因是允许 类 中的运算符重载。同样适用于其他语言,例如in C#,以允许运算符在受限 类.
该 C# 线程中提到的另一个原因是将无符号短整型更改为整数,而 MATLAB 并非如此:
d=uint8(1)
d =
uint8
1
+d
ans =
uint8
1
a=+d
a =
uint8
1
但是,它确实将布尔值转换为双精度值,感谢
+true
ans =
1
+false
ans =
0
然而,以下内容对我来说仍然是个谜,灵感来自
>> [1 ++ 2]
ans =
1 2 % Two unary plusses
>> [1 + + 2]
ans =
3 % A normal plus and a unary one
>> [1++2]
ans =
3 % A normal plus and a unary one
同样适用于多个加号,[1 +++..+++ 2]
,因此所有加号在中间连续生成 [1 2]
,所有其他组合(据我测试)导致 3
.我问了一个关于这个的单独问题:Why do the plus and unary plus behave strange in array syntax?