Class 倍频程类成员变量更改不起作用

Class 倍频程类成员变量更改不起作用,class,octave,Class,Octave,我已经建立了一个只有一个成员变量的小测试类。我试图在类的成员函数中更改此变量 我已将该类命名为:Test 我创建了一个新文件夹:@Test,其中包含所有方法。文件夹如下所示: 在Test.m构造函数中,有以下代码: function obj = Test() #member variable mem.memory = [1,5,2,4,3]; obj = class (mem, "Test"); endfunction 然后我还有显示方法: function display(

我已经建立了一个只有一个成员变量的小测试类。我试图在类的成员函数中更改此变量

我已将该类命名为:Test

我创建了一个新文件夹:@Test,其中包含所有方法。文件夹如下所示:

在Test.m构造函数中,有以下代码:

function obj = Test()
  #member variable
  mem.memory = [1,5,2,4,3];  
  obj = class (mem, "Test");
endfunction
然后我还有显示方法:

function display(obj)
  obj.memory  
endfunction
以及更改成员变量的方法:

function change(obj)
  obj.memory = [9,8,7,8,9];  
endfunction
最后一件事是主脚本,在这里我创建一个类测试的新对象,显示它,更改它,再次显示它。此文件位于@Test文件夹上方的一个文件夹中:

clc
clear all

c = Test();
display(c);
change(c);
display(c);
以下是程序的输出:

如您所见,值没有更改为9 8 9。感觉变量设置为常量,但也没有出现错误,例如:您不能更改常量变量

我在网上找了一些例子,但只能找到一些奇怪的东西。。。
如果有人能给我链接一个关于课程的好教程,那就太好了。

您需要将此更改为

function obj = change(obj)
    obj.memory = [9,8,7,8,9];
然后将该方法调用为

c = change(c);
在MATLAB语言中,除句柄类外,所有函数输入均按值获取,而不是按引用获取。因此,在函数中更改obj的副本不会更改调用者工作区中的对象。需要返回副本并将其分配给原始变量


MATLAB确实优化了语法,使其不产生任何副本。我想八度音阶也一样,但我不确定。

您需要将其更改为

function obj = change(obj)
    obj.memory = [9,8,7,8,9];
然后将该方法调用为

c = change(c);
在MATLAB语言中,除句柄类外,所有函数输入均按值获取,而不是按引用获取。因此,在函数中更改obj的副本不会更改调用者工作区中的对象。需要返回副本并将其分配给原始变量


MATLAB确实优化了语法,使其不产生任何副本。我认为Octave也一样,但我不确定。

@Cris我认为它一般不会优化,但在覆盖通常赋值机制的特定情况下,它确实会优化:@Tasos:谢谢,这很有趣。这意味着在上述函数变化的情况下,没有优化。但另一方面,这并不重要,因为整个数组都被替换了,所以不需要复制。@Cris我认为它一般不会优化,但在覆盖通常的分配机制的特定情况下它会优化:@Tasos:谢谢,这很有趣。这意味着在上述函数变化的情况下,没有优化。但另一方面,这并不重要,因为整个阵列都被替换了,所以不需要复制。