Matlab @folder 类属性混淆
Posted
技术标签:
【中文标题】Matlab @folder 类属性混淆【英文标题】:Matlab @folder class property confusion 【发布时间】:2012-08-22 21:12:50 【问题描述】:我在 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 可以解决问题,但我想它需要完全重启。
【问题讨论】:
【参考方案1】:关键是,您现在必须执行命令“清除类”,因为存在旧格式的类成员。 MATLAB 自己告诉了你这个事实。这些属性在 crazy_class.m 文件中定义。
【讨论】:
【参考方案2】:您在这里使用的是“旧式”面向对象的代码。 MATLAB 7.6 引入了“新式”面向对象的语法(使用 classdef
等),但在此之前,您可以使用您在此处使用的样式,它仍然受支持但已过时。
我建议您查看过时的文档,该文档仍然可用here。它将解释语法的细节,以及如何使用这些类。
【讨论】:
以上是关于Matlab @folder 类属性混淆的主要内容,如果未能解决你的问题,请参考以下文章