matlab定义变量范围调用工作区变量问题?


阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
成就一亿技术人!
hope_wisdom 发出的红包
实付元使用余额支付
点击重新获取
钱包余额
0
抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。余额充值
}
MATLAB文档指定:如果您尝试动态添加变量,MATLAB会发出错误匿名函数的工作空间,嵌套函数或包含嵌套函数的函数。所以,你的问题很可能是因为你的GUI中的某个按钮的匿名回调直接调用脚本(没有我不得不猜的细节)。如果是这种情况,则将其包装到又一个函数中,这样您就可以将脚本创建的变量与anon函数工作区隔离开来。设计包装器函数以接受要传递给脚本的变量作为参数,因此脚本将具有所需的内容。另外,请确保不要在包装器中嵌套函数,因为你会遇到同样的问题。注意:与您期望的相反,函数调用的脚本不会在Base工作区中创建其变量,而是在函数的工作空间中创建。只有从另一个脚本调用它才会使用Base工作区来创建变量。示例:假设脚本“his_script.m”要求变量invar1和invar2已经位于其可访问的工作区中;脚本的输出(即创建的变量)是变量outvar3和outvar4:% his_script.moutvar3 = invar1 + invar2;outvar4 = invar1 - invar2;因为没有assignin和evalin我们可以将其包装到函数my_wrapper.m中:% my_wrapper.mfunction [outvar3, outvar4] = my_wrapper(invar1, invar2)% Pre-create the outputs if the script cannot promise with% the hand on the Holy Book of Execution Paths that it will% create all the output variables.outvar3 = [];outvar4 = [];% Call the scripthis_script;end并且函数参数将作为脚本的输入,函数的返回值将是脚本的输出。现在,您可以在按钮的匿名回调中使用您的调用包装函数,例如:% initialization function of your GUI% ...set(action_button_handle, 'Callback', action_button_callback);% ...% somewhere deep in your GUI code, nested function for% manipulating the scriptfunction action_button_callback(hObject, callbackdata)[out1, out2] = my_wrapper(5,3);display(out1);display(out2);end% ...我希望这个想法现在更加清晰。请告诉我它是如何运作的。进一步评论:脚本和函数之间的主要区别之一是脚本没有自己的工作区,而函数则有。脚本使用调用它们的上下文的工作空间。这意味着您的目标“GUI应该将值传输到工作区而没有别的”会产生误导,因为您不知道脚本的工作区在哪里,除非您调用它首先。如果您确实希望GUI在Base工作区中写入,那么您应该这样做,但是您应该从控制台窗口手动调用脚本,因为控制台窗口的上下文是基础工作区。或者尝试使用evalin('base', 'script_name;');,但是你需要测试(到目前为止,我抵制了使用这样的东西的诱惑 - 完全是因为很容易搞砸,而且我不想让我感到厌恶。)
}

我要回帖

更多关于 matlab定义变量范围 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信