2

次のことを行ういくつかのmatlabコードに出くわしました:

thing.x=linspace(...

通常、.演算子は要素ごとに次の操作を行うことは知っていますが、それ自体は何をしますか? これは C++ のような単なるサブオブジェクト演算子ですか?

4

2 に答える 2

2

技術的には、mwengler の回答によると、これはインデックス作成の形式です。ただし、最近のバージョンの MATLAB では、オブジェクトのメソッド呼び出しにも使用できます。

obj.methodCall;

ただし、そのスタイルには非効率性があることに注意してください。基本的に、フィールドへのインデックス付けを意味する場合、システムは最初に解決する必要があります。そうでない場合は、メソッドを呼び出します。した方が効率的

methodCall(obj);
于 2012-05-04T08:18:54.173 に答える
2

はい、そのサブオブジェクトです。

Roger.lastname = "Poodle"; のようなものを使用できます。Roger.SSID = 111234997; Roger.children.boys = {"ジム", "ジョン"}; Roger.children.girls = {"ルーシー"};

ドットの右側にあるものはフィールドと呼ばれます。

また、Matlab でクラスを定義し、それらのクラスのオブジェクトをインスタンス化しthing、それらのオブジェクトの 1 つでthing.xある場合、そのオブジェクトのインスタンス変数にすることもできます。

matlab のドキュメントは優れています。その中の「フィールド」と「クラス」を調べてください。

には他にも用途があります。 は2 つのものを乗算することを意味します.。ただし、M、N が同じ形状の場合、各要素を乗算することを意味します。そして、より微妙な点ではそうではありませんが、ここで質問したことの範囲外です.M*NMNM.*N

@marc が指摘しているように、ドットは、matlab が構造体または構造体と呼ぶもののフィールドおよびサブフィールドを参照するためにも使用されます。これらは、クラス、サブクラス、および列挙型によく似ているように思えます。アイデアは、構造体dataに言って、次のようなデータに関連するすべての情報を保存できるということです:

olddata = data; % we assume we have an old struct like the one we are creating, we keep a reference to it

data.date_created=date();
data.x_axis = [1 5 2 9];
data.notes = "This is just a trivial example for stackoverflow.  I didn't check to see if it runs in matlab or not, my bad."
data.versions.current = "this one";
data.versions.previous = olddata;

ポイントは、任意の matlab オブジェクト/データ型/呼び出したいものは何でも、構造体のフィールドで参照できることです。最後のエントリは、構造体のフィールドで別の構造体を参照することさえできることを示しています。この最後のビットの意味は、以前のバージョンの作成日を見ることができるということです:

data.versions.previous.date_created

私には、これはJavaのオブジェクトのように見えますが、そこにメソッドを入れていません。Matlab は、一部のフィールドが関数を参照できることを除けば、これらの構造体によく似た Java オブジェクトをサポートしています。

于 2012-05-04T00:04:18.053 に答える