MATLAB GUI回调和函数变量范围

MATLAB GUI回调和函数变量范围,matlab,matlab-guide,Matlab,Matlab Guide,我想我对范围有了一个基本的了解,但是对于如何在MatlabGUI中工作,我有点困惑 例如,如果我有一个GUI,它根据editBox1的输入在轴上绘制冲浪图,我会: updateAxes函数,该函数将使用来自editBox1的输入(str2double(get(handles.editBox1,'String'))更新轴 将调用updateAxes函数的editBox1回调 直接使用get函数是否违反了updateAxes的作用域思想?我是否应该将editBox1的内容作为参数传递给updateA

我想我对范围有了一个基本的了解,但是对于如何在MatlabGUI中工作,我有点困惑

例如,如果我有一个GUI,它根据editBox1的输入在轴上绘制冲浪图,我会:

updateAxes函数,该函数将使用来自editBox1的输入(str2double(get(handles.editBox1,'String'))更新轴

将调用updateAxes函数的editBox1回调


直接使用get函数是否违反了updateAxes的作用域思想?我是否应该将editBox1的内容作为参数传递给updateAxes?

最好考虑一下您真正需要什么,而不是传递所有数据。不过,在我看来,把手是可以传递的东西。您还应该认为,即使没有传递句柄,您仍然可以访问它们。图形本质上是全局的,因为任何图形(以及图形属性)都可以通过任何函数访问。通过不传递句柄,您可以更难访问图形,但不能阻止访问。如果你想修改一个图形,我看不出有什么理由不把句柄传递给图形,或者把句柄传递给图形中的所有对象。第二个选项会让你省去搜索(递归)对象的麻烦如果您发现同一图形需要另一个句柄,请列出子对象。如注释中所述,GUI matlab有一种通过函数
guidata
处理此问题的简单方法。另外,考虑可维护性。使用选定的句柄集(正确命名或排序)维护代码会更容易吗,还是您更愿意通过一组不知名的子对象访问它们?

为什么您会为此烦恼,为什么您会人为地限制自己?你认为你的代码不会被其他人理解,或者你害怕破坏某些东西吗?我觉得我不需要向我的函数传递那么多参数,但同时我一直认为函数应该只接收它需要的参数。传入“handles”使函数可以访问很多东西,几乎感觉像是在作弊。如果不传入
handles
,那么以后更新它将是一个很大的麻烦。另外,我认为如果你不应该传递
句柄来修改它,你几乎永远都不需要。顺便说一句,我认为这种哲学问题更适合你。谢谢!下次我会发到那里。直到现在我才知道它的存在。虽然我认为只访问你需要的东西的原则是好的,但同时我必须同意@Dev iL。如果你不把
句柄
传递给你的函数,你会让你的生活变得非常困难,如果你想修改一些东西的话。此外,您只将
句柄的副本传递给函数。您可以修改此处引用的GUI对象,如绘图,但即使您更改
句柄中变量的值,它也不会反映在您的guy中,除非您将其从函数传回。