【问题标题】:MATLAB GUI callbacks and function variable scopeMATLAB GUI 回调和函数变量范围
【发布时间】:2015-06-17 14:16:56
【问题描述】:

我想我对范围有基本的了解,但我对它在 MATLAB GUI 中的工作方式有点困惑。

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

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

将调用 updateAxes 函数的 editBox1 回调。

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

【问题讨论】:

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

标签: matlab matlab-guide


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2013-08-07
    相关资源
    最近更新 更多