我有一些形式为
的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) ...
这样变量在文件的顶部声明,尽管它们在找到定义之前没有绑定。
答案 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)
如果您使用脚本(开头时没有function
或classdef
关键字的.m文件),命令的顺序必须与您输入的命令顺序相同命令行。
脚本的工作空间是命令行可访问的基础工作空间,这意味着如果您之前已经定义了这些功能(例如在测试时),那么它们将在脚本执行开始时可用。执行clear all
之类的命令将从内存中删除定义,脚本将失败。
如果您已设置使用脚本,则可以创建从主脚本调用的单独脚本。称之为setup.m
,将函数定义放在那里,然后使用setup()
启动主脚本。
或者,编写一个函数(或设置一个类)以便在声明子函数/方法的方式和位置方面具有更大的灵活性可能很有用。