次のことを行ういくつかのmatlabコードに出くわしました:
thing.x=linspace(...
通常、.
演算子は要素ごとに次の操作を行うことは知っていますが、それ自体は何をしますか? これは C++ のような単なるサブオブジェクト演算子ですか?
次のことを行ういくつかのmatlabコードに出くわしました:
thing.x=linspace(...
通常、.
演算子は要素ごとに次の操作を行うことは知っていますが、それ自体は何をしますか? これは C++ のような単なるサブオブジェクト演算子ですか?
技術的には、mwengler の回答によると、これはインデックス作成の形式です。ただし、最近のバージョンの MATLAB では、オブジェクトのメソッド呼び出しにも使用できます。
obj.methodCall;
ただし、そのスタイルには非効率性があることに注意してください。基本的に、フィールドへのインデックス付けを意味する場合、システムは最初に解決する必要があります。そうでない場合は、メソッドを呼び出します。した方が効率的
methodCall(obj);
はい、そのサブオブジェクトです。
Roger.lastname = "Poodle"; のようなものを使用できます。Roger.SSID = 111234997; Roger.children.boys = {"ジム", "ジョン"}; Roger.children.girls = {"ルーシー"};
ドットの右側にあるものはフィールドと呼ばれます。
また、Matlab でクラスを定義し、それらのクラスのオブジェクトをインスタンス化しthing
、それらのオブジェクトの 1 つでthing.x
ある場合、そのオブジェクトのインスタンス変数にすることもできます。
matlab のドキュメントは優れています。その中の「フィールド」と「クラス」を調べてください。
には他にも用途があります。 は2 つのものを乗算することを意味します.
。ただし、M、N が同じ形状の場合、各要素を乗算することを意味します。そして、より微妙な点ではそうではありませんが、ここで質問したことの範囲外です.M*N
M
N
M.*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 オブジェクトをサポートしています。