1

我对 matlab 有点困惑,对不起,我找不到更好的标题。

我有以下结构

testit.m
+package
   testfile.m

testit.m 包含:

import package.testfile

testfile 

testfile.m 包含:

view = struct();
v = uiextras.Grid( 'Spacing', 5 );
view.view = v;
view.axes = axes( 'Parent', view.view ); 

如果我现在 cd 进入基本目录并键入testit,则会收到以下错误:

??? Error using ==> axes
Conversion to double from unknown is not possible.

Error in ==> testfile at 4
view.axes = axes( 'Parent', view.view );
Error in ==> testit at 3
testfile 

到目前为止,一切都很好。但是,如果我不将 testfile.m 放入包中并通过 testfile.m 直接调用它,一切正常。如果我将 testfile.m 的最后一行替换为

view.axes = axes( 'Parent', v ); 

这样我不使用结构访问网格,我得到错误:

??? No method 'onChildAddedEvent' with matching signature found for class 'uiextras.Grid'.

Error in ==> Container>@(varargin)obj.onChildAddedEvent(varargin{:}) at 95
            obj.Listeners{end+1,1} = handle.listener( containerObj, 'ObjectChildAdded', @obj.onChildAddedEvent );

Warning: Error occurred while evaluating listener callback. 
> In testfile at 4
  In testit at 3

uiextras 来自http://www.mathworks.com/matlabcentral/fileexchange/27758

为什么我是否将文件放入包中会有所不同?为什么我使用 v 或 view.view 会有所不同?我只是误解了matlab语法吗?

4

1 回答 1

1

这本身不是一个答案,但可能对像我这样结束这篇文章的其他人有用。Matlab File Exchange 上的一些文件本身包含一个版本和/或部分 GUI 布局工具箱 (+uiextras)。除了直接从文件交换中自己的条目下载的 GUI 布局工具箱 (+uiextras) 的“真实”实例之外,当您在路径中的这些其他文件交换下载之一中有一个 +uiextras 实例时,您可能会遇到问题.

在使用轴/按钮/uitables/etc 在 +uiextras 中填充标准布局时,我遇到了上述 Ferio 的此类错误:

Error in ==> Container>@(varargin)obj.onChildAddedEvent(varargin{:}) at 95
        obj.Listeners{end+1,1} = handle.listener( containerObj, 'ObjectChildAdded', @obj.onChildAddedEvent );

事实证明,在我不久前测试过但不再使用的随机文件交换下载中,我的路径中有另一个 +uiextras 实例。我删除了其他文件交换下载的整个文件夹(回想起来,从路径中删除可能就足够了),现在使用 GUI 布局工具箱可以正常工作。

您可以通过以下错误链接了解这是否与您遇到的问题相同。用 uiextras 做一些事情会导致错误。单击指向错误行号的链接(在本例中为第 95 行),它将打开发生错误的文件。对我来说,该文件位于此随机其他文件交换下载中的 DIFFERENT +uiextras 文件夹中。我删除了那个文件夹,这解决了我的问题。

于 2013-11-10T15:01:59.460 回答