这感觉就像一个非常愚蠢的问题,因为错误信息非常直接,所以我花了一些时间来创建尽可能简单的完整示例。看起来在构造函数中调用构造函数时(我认为我首先注意到的是普通方法而不是构造函数)并且对象以相反的顺序放入数组中,然后matlab会给出一个not enough input arguments error
例如:
classdef practice
methods
function self = practice(b)
b
if b>1
for i = 2:-1:1
s(i) = practice(b-i);
end
end
end
end
end
称为
practice(4)
给出
b =
4
b =
2
b =
0
Error using practice (line 4)
Not enough input arguments.
Error in practice (line 7)
s(i) = practice(b-i);
Error in practice (line 7)
s(i) = practice(b-i);
这种情况很奇怪,因为只有在到达b <= 1的地方才会失败,但我的真实代码并没有像这样失败。关于究竟出了什么问题以及如何解决它的任何想法?
答案 0 :(得分:1)
我认为问题出在第一次迭代,b = 4
时,您设置了s(i) = practice(b-i)
和i = 2
。这会将s
初始化为practice
length
2的数组,但由于您首先初始化第二个元素,因此第一个元素将初始化为默认practice
,其中输入b
未定义。
如果您将索引更改为i
次迭代为i = 1:2
,则应解决此问题。
修改强>
例如,尝试清除工作区,然后执行以下操作:
s(2) = practice(0)
这将尝试将practice(0)
分配给s(2)
,然后s(1)
将被分配默认的初始化practice
,在这种情况下,b
未定义。这将复制您遇到的问题。解决方案是首先分配到s(1)
,然后分配到s(2)
。