我在一次简单的乘法中偶然发现了一个错误,让我感到惊讶。这里发生了什么,我一直认为*
仅适用于matrix multiplication。
x = 2;
y = zeros(1,4);
y(1) = 1 *x;
y(2) = x* 1;
y(3) = (x *1);
y(4) = x *1;
y
x *1
将提供以下输出:
y =
2 2 2 1
Error: "x" was previously used as a variable,
conflicting with its use here as the name of a function or command.
See MATLAB Programming, "How MATLAB Recognizes Function Calls That Use Command Syntax" for details.
有谁知道这里发生了什么?当然,我确认x
不是函数。
答案 0 :(得分:11)
这取决于间距。另请参阅here以获得更长的解释以及何时可能存在真正含糊不清的示例,但基本上前三个将按预期工作,最后一个假设您尝试使用输入调用函数x * 1:
x*1
x * 1
x* 1
x *1
如果将输出分配给某个变量,则无论间距如何都不会发生这种情况:
y(2) = x *1
z = x *1
x = x *1
答案 1 :(得分:9)
发生这种情况是因为当你在一个单独的行中有x *1
时,MATLAB会将x
解释为一个函数,试图将'*1'
作为参数传递给它,但随后它会实现{ {1}}是一个变量,因此是错误。