【问题标题】:Matlab - usage of workspace variablesMatlab - 工作区变量的使用
【发布时间】:2011-07-27 11:28:00
【问题描述】:

我想创建一个函数function ExtremePoints = AnalyseData( ScanData )

我希望能够在不传递参数 ScanData 的情况下运行该函数,在这种情况下,我想使用来自 Matlab Workspace 的同名变量。

是否可以在函数体内使用工作区中出现的变量 ScanData?

或者我应该先将变量 ScanData 的内容从工作区保存到 .mat 文件中,然后将该文件加载到函数体中?

【问题讨论】:

  • 正如@Edric 已经提到的那样:(强烈)不鼓励这样做,因为您将无法在其他地方正确重用该函数而没有太多痛苦(缺少变量,完全不同的东西存储在@ 987654323@,不太清晰的代码,mlint 不会警告你在evalevalin 中的错误,...)。所以请帮自己一个忙,不要在不必要的时候使用这些!
  • 问题是提到的函数更多地用作测试脚本,而不是从命令行窗口启动调用,我想直接从编辑器调用函数,这就是问这个问题的原因.不过感谢您的建议! :)
  • 您可以做一些不同的事情。首先,您可以将其设为脚本而不是函数(只需省略function ...)。然后,所有变量都将成为您的基础工作区的一部分。所以这可能会变得混乱,为了方便起见,您可能需要使用clear variables; close all; clc; 之类的东西。或者您可以使用run configurations 功能。但是,在版本控制中或在不同的计算机上跟踪这些是很麻烦的。所以两者各有利弊。

标签: matlab


【解决方案1】:

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

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

如果没有提供输入参数 (nargin == 0),这将从 base 工作区中提取 ScanData 的值。

通常不鼓励使用evalevalin,因为这会使您的代码更难理解和重用。

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多