在评估文件的其余部分之前,如何强制matlab将所有函数声明提升到文件的顶部?

时间:2014-01-28 12:54:22

标签: matlab

我有一些形式为

的matlab文件
result1 = func1 x y
result2 = func2 result1 x

func1 = @(x,y) ...
func2 = @(x,y) ...

这里的要点是函数句柄在模块的底部声明,它对手头的项目更有意义。这似乎有效了一段时间。然后莫名其妙地向我抛出了所有这些function undeclared错误。手动将所有函数声明提升到文件顶部,在使用之前,解决了问题。

func1 = @(x,y) ...
func2 = @(x,y) ...

result1 = func1 x y
result2 = func2 result1 x

这是非常有限的,我想知道是否有办法解决这个问题?这样的事情会很好:

var func1
var func2 

result1 = func1 x y
result2 = func2 result1 x

func1 = @(x,y) ...
func2 = @(x,y) ...

这样变量在文件的顶部声明,尽管它们在找到定义之前没有绑定。

2 个答案:

答案 0 :(得分:0)

看起来你混淆了匿名函数定义和内部函数。匿名函数句柄存储在变量中,只有在定义后才能使用。内部函数位于.m文件的底部,可在它们出现的.m文件中使用。考虑foo.m

% foo.m:
function foo(arg)
  iFoo(arg); % ok
  anonFoo(arg); % error, not defined
  anonFoo = @(x) sin(x); % defines 'anonFoo' as an anonymous function handle
  anonFoo(arg); % ok, anonFoo is defined.
end % of foo
function out = iFoo(arg)
   out = sin(arg);
end % of iFoo
% end of foo.m

答案 1 :(得分:0)

如果您使用脚本(开头时没有functionclassdef关键字的.m文件),命令的顺序必须与您输入的命令顺序相同命令行。

脚本的工作空间是命令行可访问的基础工作空间,这意味着如果您之前已经定义了这些功能(例如在测试时),那么它们将在脚本执行开始时可用。执行clear all之类的命令将从内存中删除定义,脚本将失败。

如果您已设置使用脚本,则可以创建从主脚本调用的单独脚本。称之为setup.m,将函数定义放在那里,然后使用setup()启动主脚本。

或者,编写一个函数(或设置一个类)以便在声明子函数/方法的方式和位置方面具有更大的灵活性可能很有用。