2

我遇到了一些执行以下操作的matlab代码:

thing.x=linspace(...

我知道通常.操作员会按元素进行下一个操作,但它自己做什么?这只是一个子对象运算符,就像在 C++ 中一样?

4

2 回答 2

2

是的,它的子对象。

你可以有像 Roger.lastname = "Poodle"; 这样的东西。罗杰.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 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 回答
2

根据 mwengler 的回答,从技术上讲,它是一种索引形式。但是,它也可以用于最近版本的 MATLAB 中对象的方法调用,即

obj.methodCall;

但是请注意,这种风格存在一些低效率 - 基本上,系统必须首先确定您是否要对字段进行索引,如果不是,则调用该方法。这样做更有效率

methodCall(obj);
于 2012-05-04T08:18:54.173 回答