0

我的代码有一个 matlab 文件,我想在这个文件中定义一个新函数,我不想为这个函数添加新文件,因为这个文件是我在 Webots 中控制代理的代码,并且控制器文件必须是单一的文件。函数必须在文件中定义我的代码的第一个或最后一个或...?

4

3 回答 3

3

您不能在脚本中定义函数,但可以在函数 m 文件中定义本地函数……因此,假设您的脚本如下所示:

blah blah         %// This is your main code

%// Here you want to add another function, for example:
function y = foo(x)
    y = x + 2;

如果您尝试执行上面显示的操作,您将收到以下错误:

Function definitions are not permitted at the prompt or in scripts.

但是,如果您只是将主脚本更改为一个函数,您将能够定义本地函数:

function mainfunc %// Main function name to your choosing
blah blah         %// This is your main code

function y = foo(x)
    y = x + 2;

由于您mainfunc不接受也不返回任何参数,因此您可以像普通脚本一样运行它。另请注意,建议 main 函数和 m 文件同名。

编辑:Shai 在评论中提到这里有一个警告:虽然脚本可以访问主工作区中的变量,但函数有自己的范围。记在脑子里。尽管如此,您仍然可以使用 、 和 命令来操作工作loadsave变量。evalinassignin

于 2013-02-28T14:20:17.437 回答
2

如果你的函数非常小,可以定义为匿名函数

于 2013-02-28T08:38:28.160 回答
-2

我认为使用 eval 是您的案例的解决方案

把你的函数放在一个字符串变量中。

% script
subfun = 'do something with input parameter param, and assign to output variable'
param = xxx;
output = 0;
eval(subfun);
% Then access the output here 

这是一个例子

% Script
subfun = 'output=param^2;output=output^2;'
param = 5;
output = 0;
eval(subfun);
disp(output);
于 2013-02-28T08:48:34.597 回答