【问题标题】:Too many outputs error in MATLAB 2013aMATLAB 2013a 中的输出错误过多
【发布时间】:2014-07-12 09:37:42
【问题描述】:

执行在 MATLAB 2012b 中未失败的代码时,我在 MATLAB 2013a 中遇到了标识符为“MATLAB:TooManyOutputs”的错误。

产生此错误的行是

handles.Project = project;

其中project 是一个结构(大小1x1),handles 是一个带有我创建的GUI 句柄的结构。 Project 是结构体handles 的一个字段,在上述行之前不存在。

对我来说似乎很奇怪的是,如果我在显示的行之前的行中放置一个断点,我会对其进行注释,并且当由于该断点而暂停执行时,我会在 MATLAB 命令行中手动编写@ 987654326@没有错误。

错误可能在哪里?怎么了?

谢谢。

编辑:还有另一个无法解释的问题。我发现这一行不会使我的程序在 MATLAB 2013a for UNIX 中崩溃,但它在 MATLAB 2013a for Windows 中会崩溃。

EDIT2:我发现 MATLAB 2013a for Windows 中有一个名为 project 的新函数,所以我猜 MATLAB 认为我在调用它而不是我真正想要的变量。问题是我无法更改变量的名称(因为它存储在一个 MAT 文件中,该文件由另一个我无权访问其代码的程序创建)。那么,有没有办法说:“MATLAB,我希望你使用这个变量而不是你的新函数”?

【问题讨论】:

  • 你能在该行设置一个断点并在它停在那里时输入which project吗?输出是什么?必须有其他名为 project 的东西覆盖了结构的可见性。
  • @Daniel which project 返回:project is a variable. 如果我在 MATLAB 命令行中写 project,则表明它是一个包含两个字段的结构,这是正确的。
  • @Daniel 你是对的。请看我的 EDIT2 评论。
  • 显示您从 MAT 文件加载数据的代码部分
  • 您可以将数据加载为D = load([..]),然后访问包含在 MAT 文件中的各个变量:D.project(这里没有歧义)。

标签: matlab


【解决方案1】:

如果您使用输出参数调用 load function,则 MAT 文件的内容将作为结构返回,每个变量一个字段。这样可以避免污染工作区,尤其是在 MAT 文件中存储了许多变量的情况下,并避免可能的名称冲突。

D = load('some_file.mat');
handles.Project = D.project;

【讨论】:

  • 唯一我还没有理解的细节是为什么 MATLAB 在执行我的程序时无法将 project 识别为变量,但 它确实我在命令行中手动写了handles.Project = project
  • 这是个好问题。如果我可以访问您的代码,我也许可以回答您(通过查看代码并能够与之交互来调试某些东西很困难)......我想这与使用相同名称的事实有关作为同一范围内的函数调用和变量,但我无法确定。这或许可以解释为什么您会在命令行和执行函数之间看到不同的行为。
  • 真相是我从来不喜欢 load 函数默认的工作方式(调用时不带输出参数),它凭空引入了当前工作区中的变量。这使得代码难以阅读,尤其是在函数内部调用时。而使用 struct 语法可以清楚地了解变量的来源。
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
相关资源
最近更新 更多