Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 在matlab中定义函数而不使用新函数_Function_Matlab - Fatal编程技术网

Function 在matlab中定义函数而不使用新函数

Function 在matlab中定义函数而不使用新函数,function,matlab,Function,Matlab,我的代码有一个matlab文件,我想在这个文件中定义一个新函数,我不想为这个函数添加新文件,因为这个文件是我控制Webots中代理的代码,控制器文件必须是单个文件。 函数必须定义文件中我的第一个代码或最后一个代码,或者…?如果你的函数很小,你可以将它定义为一个如果你的函数很小,你可以将它定义为一个我认为使用eval可以解决你的问题 将函数放入字符串变量中 % script subfun = 'do something with input parameter param, and assign

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

如果你的函数很小,你可以将它定义为一个

如果你的函数很小,你可以将它定义为一个

我认为使用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);

我认为使用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);

您不能在脚本中定义函数,但可以在函数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 mainfunc %// Main function name to your choosing
blah blah         %// This is your main code

function y = foo(x)
    y = x + 2;
由于您的
mainfunc
既不接受也不返回任何参数,因此您可以像运行普通脚本一样运行它。还请注意,建议主函数和m文件使用相同的名称


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

您不能在脚本中定义函数,但可以在函数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 mainfunc %// Main function name to your choosing
blah blah         %// This is your main code

function y = foo(x)
    y = x + 2;
由于您的
mainfunc
既不接受也不返回任何参数,因此您可以像运行普通脚本一样运行它。还请注意,建议主函数和m文件使用相同的名称



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

该文件是脚本还是函数?查看此文件是脚本文件如果我在第一个脚本代码中插入函数,则会发生一个错误,表示我的脚本代码不在任何函数中是的,您可以。只需使用
function yourFunctionName()
语句启动文件,您就可以在文件中自由定义其他本地函数。请参阅:文件是脚本还是函数?请参阅此文件是脚本文件如果我在第一个脚本代码中插入我的函数,则会发生一个错误,表示我的脚本代码不在任何函数中是的,您可以。只需使用
function yourFunctionName()
语句启动文件,您就可以在文件中自由定义其他本地函数。请看:不,我的函数不是很小不,我的函数不是很小我不认为这是一个非常好的建议,对于那些从问题和评论来看,是Matlab初学者的人来说
eval
有它的位置,但这个位置不在试图编写包含本地函数定义的脚本文件中。OP最好遵循@H.Muster的注释。@HighPerformanceMark如果需要的函数非常大,并且需要多行,即使使用匿名函数,也需要eval的帮助。据我所知,matlab没有lambda。甚至内联函数也只是一个eval的包装器。我不认为这是一个非常好的建议,从问题和评论来看,这是一个Matlab初学者
eval
有它的位置,但这个位置不在试图编写包含本地函数定义的脚本文件中。OP最好遵循@H.Muster的注释。@HighPerformanceMark如果需要的函数非常大,并且需要多行,即使使用匿名函数,也需要eval的帮助。据我所知,matlab没有lambda。甚至内联函数也只是eval的包装器。另一个注释——如果您将脚本封装在函数中,当您运行它时,在脚本中创建的结果变量将不会保留在工作环境中。此外,如果脚本使用工作区中已定义的变量,则这些变量在函数运行时将不可用。一个脚本和一个函数使用不同的作用域。@这是一个很好的观点,但使用
保存
加载
可以避免这一点。虽然有点麻烦,但它是有效的。当您使用它时,可以使用
evalin
assignin
避开它。。。更少的磁盘访问…我已经修改了答案。感谢您的评论:)另一条评论-如果您将脚本封装在函数中,当您运行它时,在脚本中创建的结果变量将不会保留在工作环境中。此外,如果脚本使用工作区中已定义的变量,则这些变量在函数运行时将不可用。一个脚本和一个函数使用不同的作用域。@这是一个很好的观点,但使用
保存
加载
可以避免这一点。虽然有点麻烦,但它是有效的。当您使用它时,可以使用
evalin
assignin
避开它。。。更少的磁盘访问…我已经修改了答案。感谢您的评论:)