2

私は MATLAB で他の誰かのコードを操作していますが、フィールド名をまったく宣言せずにフィールド名を使用するだけで、構造を作成しているように見えます。それが MATLAB での動作です。選択した大文字と小文字を区別しないフィールド名を使い始めるだけですか?

たとえば、彼は次のようなものを持っています。

classdef Emitter
   properties
      transients=[];
   end
end

... some other class
   methods
      function sound=makeSound()
         emitterthing.transients.receivedIntensity = 100
         emitterthing.transients.frequency = 500
      end
   end 

つまり、フィールド名やその型を宣言せずに、フィールド名を作成して値を代入するだけです。

それはMATLABでどのように機能しますか?

4

2 に答える 2

3

はい、フィールド名は MATLAB では動的であり、いつでも追加または削除できます

%// Construct struct with two fields
S = struct('one', {1}, 'two', {2});

%// Dynamically add field
S.three = 3;

%// Remove a field
S = rmfield(S, 'two')

唯一の制約は、構造体の配列がある場合、それらはすべて同じフィールド名を持つ必要があるということです。

%// Create an array of structures
S(1).one = '1.1';
s(2).one = '1.2';

%// Dynamically add a new field to only one of the structs in the array
s(1).two = '2.1';

%// s(2) automatically gets a "two" field initialized to an empty value
disp(s(2))

%//     one: '1.2'
%//     two: []

また、MATLAB は動的型付けを使用するため、事前に変数やフィールドの型を定義する必要はありませんstruct

于 2016-05-19T03:01:38.743 に答える
0

データを格納するための便利な方法である structs (suever's answer でカバーされる機能)classesのインスタンスを区別する必要があります。構造体もクラスのインスタンスですが、すべてのプロパティは設計上動的プロパティであるため、心配する必要はありません。いつもそうであるとは限りません。

たとえば、Figure 内に多数の gui 要素を含む gui をゼロから作成する場合、gui 要素間で多くのプロパティと値を渡す必要があります。すべての要素に共通しているのは、それらが配置されている図です。そのハンドル、現在の図のハンドル、図クラスのインスタンスはgcf、GUI のすべてのコールバック関数で簡単に取得できます。したがって、このハンドルを使用してすべての情報を GUI 内で渡すと便利です。

しかし、次のことはできません。

h = figure(1);
h.myData = 42;

Figure クラスは動的プロパティ を提供しないため、次のように定義するmyData必要があります。

h = figure(1);
addprop(h,'myData');
h.myData = 42;

違いが明確になったことを願っています。

于 2016-05-19T06:21:24.107 に答える