2016-05-19 1 views
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での動作ですか?

答えて

3

はい、フィールド名はare dynamic in MATLAB and can be added or removed at any timeです。

%// 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: [] 

任意の変数の型や時間のstruct先のフィールドを定義する必要がないので、また、MATLABは動的型付けを使用しています。

0

は、データ(suever's answerで扱われる機能)とinstances of classesのデータを保存する便利な方法です。構造体もクラスのインスタンスですが、すべてのプロパティは動的プロパティであり、これは心配する必要はありません。それは必ずしもそうではありません。

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

しかし、あなたはただ行うことはできません。

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

フィギュアクラスはdynamic propertymyDataを提供していないので、 - あなたはdefine itする必要があります。

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

私は違いが今明らかであると思います。

関連する問題