You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 21:36:04