Matlab嵌套函数调用时无法识别输入参数问题求助
MATLAB传递函数参数时输入参数不足的问题解决
问题复现
以下是最小复现代码:
innerFunc([2, 4, 5]) % 正常运行 outerFunc(innerFunc, [2, 4, 5]) % 运行失败 function out = innerFunc(my_vec) my_vec % 从outerFunc调用时无法被识别 out = -1; end function out = outerFunc(func, my_vec) out = func(my_vec); end
运行后报错信息:
my_vec = 2 4 5 ans = -1 Not enough input arguments. Error in nested_funcs_bug>innerFunc (line 5) my_vec % not recogniced when called from outerFunc Error in nested_funcs_bug (line 2) outerFunc(innerFunc, [2, 4, 5]) % doesn't work >>
问题原因
在MATLAB中,直接将函数名innerFunc作为参数传递时,MATLAB会立即执行该函数,而非传递函数句柄。此时调用innerFunc未传入任何参数,直接触发“输入参数不足”的错误,和outerFunc内部的调用逻辑无关。
解决方案
要传递函数作为参数,需使用@操作符创建函数句柄,或者通过str2func函数生成函数句柄:
方法1:使用@创建函数句柄
修改调用代码为:
innerFunc([2, 4, 5]) % 正常运行 outerFunc(@innerFunc, [2, 4, 5]) % 正常运行
方法2:使用str2func生成句柄
也可以用字符串转函数句柄的方式:
outerFunc(str2func('innerFunc'), [2, 4, 5])
修改后,outerFunc能正确将my_vec传递给innerFunc,函数可正常执行。
内容的提问来源于stack exchange,提问作者haifisch123
相关产品推荐
相关产品推荐

