2014-11-01 98 views
0

工作我有一个功能,其中使用模型的结构和版本号作为输入改变目录到模型的一个和加载其结果一个单独的文件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

这是因为你只在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 

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

+0

如果我不希望我的函数返回任何东西,该怎么办。如果我不想考虑每一个函数应该返回什么,而是想让这个函数做的任何事情都可以完成到它所称的工作空间中去? – Konstantin 2014-11-02 00:31:16

+0

你有几个选择。最简单的是我建议的那个。否则,你可以使用一个脚本文件,它只是一个将在当前工作区运行的命令集合 - 主要的问题是你不能像参数文件那样将参数传递给脚本文件。或者,你可以玩'evalin'或'assignin',但我强烈建议不要这样做。最后,您可以将变量定义为'global',这将使每个工作区都可以访问。 – MrAzzaman 2014-11-02 01:24:17

1

您需要了解工作区的概念:功能工作区与基本工作区(可从命令行访问的工作区)不同。你的函数正常执行,变量loadPath被创建,但是在函数工作区中,而不是在基础工作区中。因为你的函数不会返回任何你无法访问的东西。在调试模式下,您可以访问功能工作区,以便您可以看到变量。如果要从基工作区访问它,则需要该函数返回感兴趣的变量。我建议你看一下文档,它非常全面。

相关问题