Что это. оператор в матлаб?

Я наткнулся на некоторый код Matlab, который сделал следующее:

thing.x=linspace(...

Я знаю, что обычно . оператор выполняет следующую операцию поэлементно, но что она делает сама? Является ли это просто оператором подобъекта, как в C++?

2 ответа

Решение

Да, его подобъект.

Вы можете иметь такие вещи, как Roger.lastname = "Poodle"; Roger.SSID = 111234997; Roger.children.boys = {"Джим", "Джон"}; Roger.children.girls = {"Люси"};

А вещи справа от точек называются полями.

Вы также можете определить классы в Matlab, установить объекты этих классов, а затем, если thing был одним из тех объектов, thing.x будет переменной экземпляра в этом объекте.

Документация по matlab превосходна, посмотрите в ней "поля" и "классы".

Есть и другие варианты использования ., 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 stackru.  I didn't check to see if it runs in matlab or not, my bad."
data.versions.current = "this one";
data.versions.previous = olddata;

Дело в том, что ЛЮБОЙ объект / тип данных / все, что вы хотите назвать, может указываться полем в структуре. Последняя запись показывает, что мы можем даже ссылаться на другую структуру в области структуры. Смысл этого последнего бита в том, что мы можем посмотреть на дату создания предыдущих версий:

data.versions.previous.date_created

Для меня это выглядит так же, как объекты в Java, КРОМЕ я не поместил там никаких методов. Matlab поддерживает объекты Java, которые для меня очень похожи на эти структуры, за исключением того, что некоторые поля могут ссылаться на функции.

Технически, это форма индексации, согласно ответу mwengler. Тем не менее, он также может быть использован для вызова метода на объектах в последних версиях MATLAB, т.е.

obj.methodCall;

Однако обратите внимание, что в этом стиле есть некоторая неэффективность - в основном, система должна сначала сработать, если вы имели в виду индексирование в поле, а если нет, то вызвать метод. Это более эффективно сделать

methodCall(obj);
Другие вопросы по тегам