【发布时间】:2012-05-13 12:46:42
【问题描述】:
我遇到了一些执行以下操作的 matlab 代码:
thing.x=linspace(...
我知道. 运算符通常会按元素进行下一个操作,但它自己做了什么?这只是像 C++ 中的子对象运算符吗?
【问题讨论】:
标签: matlab operators dot-operator
我遇到了一些执行以下操作的 matlab 代码:
thing.x=linspace(...
我知道. 运算符通常会按元素进行下一个操作,但它自己做了什么?这只是像 C++ 中的子对象运算符吗?
【问题讨论】:
标签: matlab operators dot-operator
是的,它的子对象。
你可以拥有类似的东西 Roger.lastname = "贵宾犬"; 罗杰.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 对象,这些对象在我看来很像这些结构,除了一些字段可以引用函数。
【讨论】:
.* 是元素乘法运算符。 +.* 有什么不同?
根据 mwengler 的回答,从技术上讲,它是一种索引形式。但是,它也可以用于最近版本的 MATLAB 中对象的方法调用,即
obj.methodCall;
但是请注意,这种风格存在一些低效率 - 基本上,系统必须首先确定您是否要对字段进行索引,如果不是,则调用该方法。这样做更有效率
methodCall(obj);
【讨论】: