2013-02-28 115 views
0

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

+0

该文件是脚本还是函数? – 2013-02-28 08:30:47

+1

见http://www.mathworks.de/de/help/matlab/matlab_prog/local-functions.html – 2013-02-28 08:31:05

+0

这个文件是一个脚本文件 – 2013-02-28 08:31:29

回答

2

如果你的功能是非常小的,你可以将其定义为anonymous function

+0

或内联函数也可能工作... – bla 2013-02-28 08:41:25

+0

不,我的功能不是很小 – 2013-02-28 08:41:36

-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); 
+0

我不要以为这是一个非常好的建议,根据问题和评论来看,这是一个初学Matlab的人。'eval'有它的地方,但那个地方不是试图编写包含本地函数定义的脚本文件。按照@ H.Muster的评论的主旨,OP会更好。 – 2013-02-28 10:05:46

+0

@HighPerformanceMark如果所需的功能非常大,并且需要多行,即使使用匿名函数,也需要eval的帮助。据我所知,matlab没有lambda。甚至内联函数只是eval的一个包装。 – 2013-02-28 10:54:55

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不接受也不返回任何参数,可以像普通的脚本一样运行它。另外请注意,建议主函数和m文件共享相同的名称。

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

+0

另一个评论 - 如果您将脚本封装在一个函数中,那么当您运行脚本时,脚本中创建的结果变量将不会保留在工作环境中。而且,如果脚本使用已经在工作区中定义的变量,那么在函数运行时这些变量将不可用。 **脚本和函数使用不同的作用域**。 – Shai 2013-02-28 14:35:22

+0

@Shai好点,但这可以通过使用'save'和'load'来回避。有点麻烦,但它的工作原理。 – 2013-02-28 14:43:58

+0

当你在它的时候,它可以使用'evalin'和'assignin'来回避...更少的磁盘访问...... – Shai 2013-02-28 14:47:11