Matlab函数仅在调试模式下工作

时间:2014-11-01 23:41:16

标签: matlab

我在一个单独的文件中有一个功能

   function [ ] = loadModel( model , version )

   cd(model.path);  

   loadPath =  strcat(model.name(1,:) , model.versions(version,:), '_results' ) ;

   load(loadPath,'-mat');

   end

使用模型结构和版本号作为输入将目录更改为模型之一并加载其结果。当我从一个m文件调用该函数时,没有错误,但似乎没有执行该函数的任何行,例如变量loadPath甚至不存在。当我在load()之前设置一个断点时,我看到loadPath生成正确,如果我手动输入最后一行,它工作正常。任何线索为什么会发生这种情况?

P.S。我习惯于C ++,Java,我发现matlab语言绝对是nighmare

2 个答案:

答案 0 :(得分:2)

这是因为您只在loadModel函数范围内加载文件。在MATLAB中,在函数内声明的变量(包括通过文件加载)仅在该函数中定义 (禁止全局变量,assignin等)。您需要返回文件加载的结果才能使用加载的数据。例如:

function data = loadModel( model , version )

cd(model.path);  

loadPath =  strcat(model.name(1,:) , model.versions(version,:), '_results' ) ;

data = load(loadPath,'-mat');

end

这会将文件加载到结构中,该结构将返回到调用范围。然后,您可以从此结构中访问已加载的数据。

答案 1 :(得分:1)

您需要了解工作空间的概念:功能工作空间与基础工作空间(您可以从命令行访问的工作空间)不同。您的函数正常执行并且创建了变量loadPath,但是在函数工作空间中,而不是基础工作空间。由于您的功能没有返回任何您无法访问它的功能。在调试模式下,您可以访问功能工作区,以便查看变量。如果要从基础工作区访问它,则需要该函数返回感兴趣的变量。我建议您查看文档,它非常详尽。