Matlab - 工作区变量的使用

5
我希望创建一个函数 function ExtremePoints = AnalyseData( ScanData )
我希望能够在不传递参数ScanData的情况下运行该函数,并且在这种情况下,我想使用与Matlab Workspace中同名的变量。
在函数体内部使用Workspace中出现的变量ScanData是否可行?
或者,我应该先将Workspace中变量ScanData的内容保存到.mat文件中,然后在函数体中加载该文件?

3
正如@Edric已经提到的那样:这是(强烈)不鼓励这样做的,因为你将无法在其他地方正确地重复使用该函数而不会感到痛苦(变量缺失,在“ScanData”中完全存储不同的内容,代码不够清晰,mlint不会警告您在eval或evalin内部的错误等)。所以请自己想想,如果没有必要,请避免使用它们! - Egon
问题在于所提到的函数更多地被用作测试脚本,而我想直接从编辑器中调用该函数,而不是从命令窗口启动调用。这就是我提出这个问题的原因。尽管如此,还是感谢您的建议! :) - Simon
1
有一些不同的事情可以做。首先,您可以将其制作为脚本而不是函数(只需省略 function ...)。所有变量都将成为基础工作区的一部分。因此,这可能会变得混乱,您可能需要尝试使用 clear variables; close all; clc; 等功能来方便地处理。或者,您可以使用 运行配置 功能。但是,在版本控制或不同计算机上跟踪它们很麻烦。因此,两者都有优缺点。 - Egon
1个回答

11

这是可能的,也许不完全推荐。以下是方法:

function ExtremePoints = AnalyseData( ScanData )
if nargin == 0
    ScanData = evalin( 'base', 'ScanData' );
end
% do stuff

如果没有输入参数(nargin == 0),则从base工作空间中提取ScanData的值。

通常不建议使用evalevalin,因为这会使您的代码难以理解和重用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接