我遇到了一些执行以下操作的matlab代码:
thing.x=linspace(...
我知道通常.
运算符会按元素进行下一个操作,但它本身做什么 ?这只是一个子对象操作符,就像在C ++中一样吗?
答案 0 :(得分:2)
是的子对象。
你可以拥有类似的东西 Roger.lastname =“贵宾犬”; Roger.SSID = 111234997; Roger.children.boys = {“Jim”,“John”}; Roger.children.girls = {“Lucy”};
点右边的东西称为字段。
您还可以在Matlab中定义类,实例化这些类的对象,然后如果thing
是其中一个对象,thing.x
将是该对象中的实例变量。
matlab文档非常好,在其中查找“fields”和“classes”。
.
还有其他用途,M*N
表示多重合作两件事,如果M
,N
都是矩阵,则实现矩阵乘法的规则以获得新矩阵作为结果。但是M.*N
意味着,如果M,N是相同的形状,则乘以每个元素。所以没有更多细微之处,但超出了你在这里所要求的范围。
正如@marc指出的那样,dot也用于引用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对象,这些对象看起来很像这些结构,除了一些字段可以引用函数。
答案 1 :(得分:2)
从技术上讲,这是一种索引形式,根据mwengler的回答。但是,它也可以用于最近版本的MATLAB中对象的方法调用,即
obj.methodCall;
但请注意,该样式存在一些效率低下 - 基本上,如果您想要将字段索引到字段中,系统必须首先计算出来,如果没有,则调用该方法。
更有效率methodCall(obj);