【问题标题】:Collect internal variables of nested functions in matlab在matlab中收集嵌套函数的内部变量
【发布时间】:2021-11-25 14:14:39
【问题描述】:

我有一个由多个嵌套函数组成的项目。 出于调试目的,我想以一种或另一种方式保存所有内部变量,以便显示数字、重播部分代码等...
我还希望在计算时间方面尽可能保持透明。

我的第一个想法是创建一个全局变量,并在每个函数的末尾以编程方式将变量内的输入和输出存储为一个结构:

globalVariable.nameOfParentfunction_NameOfFunction.nameInput1 = valueInput1;
globalVariable.nameOfParentfunction_NameOfFunction.nameInput2 = valueInput2;
...
globalVariable.nameOfParentfunction_NameOfFunction.nameOutput1 = valueOutput1;
...

是否可以使用某种反射来获取输入/输出的名称和值,而不必解析编写函数的文件?

我找到了一个不错但可能已经过时的topic about parsing

如何收集内部信号?

【问题讨论】:

  • 您最好使用assignin 将变量分配给您的基础工作区,但是这种方法和全局变量方法似乎都非常混乱。如果只是为了调试,你可能会更好地在特定功能中进行调试。如果您希望调用者函数更广泛地使用它的数据,那么只需从您的函数中提供更多输出,即可能是第二个输出,它是所需值的结构。
  • 这实际上是使用的过程,一个结构作为输入/输出传递以存储ws2struct()的工作区数据。我想看看是否有更好的方法。我不喜欢每次必须创建一个新函数时都创建输入/输出,因为有很多嵌套函数,它们可能会被多次调用,但这是一个观点。
  • 或者创建一个handle 类,您只需将其作为输入传递并更新其属性

标签: matlab nested-function


【解决方案1】:

简单的解决方案是使用save,它将当前工作区(函数的上下文)中的所有变量保存到文件中。

如果要将值保存在内存中,而不是文件中,可以使用names = who 获取当前工作空间中定义的所有变量的列表,然后使用val = eval(names{i}) 获取调用的变量的值name{i}.

我建议将所有这些放在一个单独的函数中,您可以从任何其他函数调用该函数来存储其变量,以避免重复代码。此函数将使用evalin('caller',…) 获取调用函数工作区中变量的名称和值。


请注意,使用 evalevalin 会阻止 MATLAB 使用其 JIT 优化代码。它们使用起来也很危险,因为它们可以执行任意代码,但是在这种情况下,您可以控制正在执行的内容,因此无需担心。

【讨论】:

  • 这是一个很好的方法,似乎符合我的需求,我让问题未解决,等待其他方法。我会在时间允许的时候实现它并发布子功能。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 2018-10-23
  • 2019-06-14
  • 1970-01-01
  • 2015-03-26
  • 2014-06-20
  • 2011-09-06
相关资源
最近更新 更多