0

クラスに編成されたmatlabの既存のコードを使用しています。classdef を使用する代わりに、@folder を使用します。それがどのように機能するのか正確にはわかりませんが、問題が発生しています。

コンストラクターの形式は次のとおりです。

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

重要なのは、古い形式の既存のクラスメンバーが存在するため、コマンド「clearclasses」を実行する必要があるということです。MATLABはその事実自体を教えてくれました。プロパティは、crazy_class.mファイルで定義されています。

于 2012-08-22T21:24:36.000 に答える
1

ここでは、「古いスタイル」のオブジェクト指向コードを使用しています。MATLAB 7.6では「新しいスタイル」のオブジェクト指向構文(classdefなどを使用)が導入されましたが、それ以前は、ここで使用しているスタイルを使用できました。これはまだサポートされていますが、廃止されています。

廃止されたドキュメントをご覧になることをお勧めします。このドキュメントはまだここにあります。構文の詳細と、これらの種類のクラスの操作方法について説明します。

于 2012-08-23T11:58:41.140 に答える