【问题标题】:MatLab global function issueMatLab 全局函数问题
【发布时间】:2012-12-18 02:00:50
【问题描述】:

我正在学习 MatLab 并遇到了障碍。

我有一个带有interface.minterface.fig 文件,它充当我的“主”GUI 窗口。从那里另一个文件; bright.m 被调用。

bright文件需要更新主文件中的全局变量以及调用函数,我已经把全局变量弄出来了,但是不能调用函数。

什么都试过了,看着做这样的事情:

reDisplay();
evalin('base','reDisplay()');
interface.reDisplay();
interface>reDisplay();

但是没有运气。

【问题讨论】:

  • 你能具体描述一下为什么你不能从bright.m中调用函数吗?你为什么不能简单地打电话给output = myfunction(myArgs);

标签: matlab user-interface


【解决方案1】:

只有 M 文件中的第一个函数可以从该文件外部调用。如果您希望您的函数可以全局访问,那么您需要将它们保存在独立文件中。

如果您需要在这些函数之间全局访问状态,请将它们作为参数传递,或者考虑使用面向对象的方法来解决您的问题。

【讨论】:

  • AND第一个函数必须与文件名相同。
  • @dinkelk 在 R2012b 上,这不是真的。 m 文件中的第一个函数是调用函数文件时执行的函数。尝试创建一个简单的函数,但使用不同的名称保存文件。您会收到一条警告,提示“MATLAB 通过文件名 'ABC' 知道函数 'XYZ'”。此外,您可以使用名称 ABC 调用 XYZ 函数
  • 有趣,我只是在 R2012b for Linux 上尝试过,我没有得到你描述的行为。我将不得不对此进行更多调查。
【解决方案2】:

如果 Matlab 中的函数定义inside一个文件名与函数名不同的 m 文件 - 那么就无法从其 m 文件外部调用此函数。

为了使reDisplay 函数对bright.m 可见,您应该在名为reDisplay.m 的自己的m 文件中拥有此函数

【讨论】:

  • 总是这样吗?我似乎记得,如果您有一个与文件名称不同的函数,它仍然会被调用,尽管使用的是 m 文件的名称而不是函数名称。
  • 嗯,我有一个窗口,选项框在较小的窗口中打开,当更改时它需要调用此全局函数来设置更改..
猜你喜欢
  • 2014-09-06
  • 2016-02-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多