如何在MATLAB中向匿名函数传递对象作为输入参数
问题原因
你的代码存在参数名不匹配的错误:匿名函数形参列表中定义的对象参数名为objectToPassToFunc1,但调用Func1时使用的参数名是objectToPass,二者不一致。MATLAB无法匹配到对应参数时,会优先读取当前工作区的同名变量,最终出现参数错位的问题。
解决方案
根据你的使用场景选择对应写法即可:
场景1:创建匿名函数时对象已固定,不需要每次调用动态更换
利用MATLAB匿名函数自动捕获定义时工作区变量的特性,不需要将对象放入形参列表,写法更简洁:
% 确保执行这段代码前,工作区已定义好要传入的对象 objectToPassToFunc1 varNameStr = strjoin(varNames, ','); funcCallStr = "Func1(objectToPassToFunc1, """ + strjoin(varNames, '","') + """)"; Func2 = str2func(sprintf('@(%s) %s', varNameStr, funcCallStr));
场景2:需要每次调用Func2时传入不同的对象
确保形参名和调用时的参数名完全一致即可:
varNameStr = strjoin(varNames, ','); % 调用Func1时的参数名和形参列表里的对象参数名保持一致 funcCallStr = "Func1(objectToPassToFunc1, """ + strjoin(varNames, '","') + """)"; Func2 = str2func(sprintf('@(objectToPassToFunc1, %s) %s', varNameStr, funcCallStr));
调用示例:
% 按顺序传入对象、各个变量的值即可 result = Func2(your_custom_object, var1_value, var2_value);
注意:如果
varNames列表中存在和objectToPassToFunc1重名的变量,修改其中一个的名称避免冲突即可。
内容的提问来源于stack exchange,提问作者alfavictor
相关产品推荐
相关产品推荐

