0

我在 matlab 中使用预先存在的代码,这些代码被组织成类。它不使用classdef,而是使用@folder's。我不完全确定它是如何工作的,它给我带来了一些麻烦。

构造函数格式如下:

function this = crazy_class(varargin)

    this.a = [];
    this.b = [];
    this = class(this, 'crazy_class'); 

end

我需要向该类添加一个新属性,但如果我这样修改它:

function this = crazy_class(varargin)

    this.a = [];
    this.b = [];
    this.newProperty = [];
    this = class(this, 'crazy_class'); 

end

我得到以下信息:

Number of fields for class crazy_class cannot be changed without clear classes.

它不喜欢我向类添加新的未指定属性。很公平,如果有一个 classdef,添加一个新属性会很简单,但是我不知道如何使用 @folder 格式来做到这一点。

文件夹中没有 .m 文件或任何与此相关的文件来指定类的任何属性。我能找到的最接近的是重载函数:

subsasgn.m:

  this = builtin('subsasgn', this, selector, value);

subsref.m:

 r = builtin('subsref', this, selector);

但就是这样。当任何其他文件中没有提到它们时,此类如何知道哪些是有效属性,哪些不是。我应该寻找什么来改变这一点?

编辑:这很尴尬......我重新启动了 Matlab,现在一切正常。我认为通过键入命令 clear classes 或 clear all 可以解决问题,但我想它需要完全重启。

4

2 回答 2

2

关键是,您现在必须执行命令“清除类”,因为现有的类成员具有旧格式。MATLAB 自己告诉了你这个事实。这些属性在 crazy_class.m 文件中定义。

于 2012-08-22T21:24:36.000 回答
1

您在这里使用“旧式”面向对象的代码。MATLAB 7.6 引入了“新式”面向对象的语法(使用classdef等),但在此之前,您可以使用您在此处使用的样式,它仍然受支持但已过时。

我建议您查看过时的文档,该文档在此处仍然可用。它将解释语法的细节,以及如何使用这些类。

于 2012-08-23T11:58:41.140 回答