26

我创建了一个 MATLAB 类,例如:

classdef myclass

  properties
      x_array = [];
  end

  methods
    function increment(obj,value)
       obj.x_array = [obj.x_array ; value);
    end
  end
end

问题是,当我调用该函数时,该属性x_array永远不会被修改increment():例如:

>>s = myclass
>>increment(s,5)

>>s.x_array
ans = []

我做了一些研究,得出的结论是,这是因为 MATLAB 对对象使用了延迟复制,让我的类继承 HANDLE 类应该可以解决这个问题,但是没有,有人知道为什么会这样吗?如果扩展句柄类是独立的解决方案,这不是正确的方法吗:

classdef myclass < handle

还是有任何额外的步骤?

4

2 回答 2

27

这类似于这个问题。简而言之,您所要做的就是从句柄类继承。

快速示例

文件 myclass.m 的内容

classdef myclass<handle
    properties
        x_array = []
    end
    methods
        function obj=increment(obj,val)
            obj.x_array=[obj.x_array val];
        end
    end
end

现在在 Matlab 命令提示符下,您可以执行以下操作

>> s=myclass;
>> s.increment(5)
>> s.increment(6)
>> s

s = 

myclass handle

properties:
    x_array: [5 6]

lists of methods, events, superclasses
于 2008-11-07T17:46:44.347 回答
0

有一个更简单的方法。您只需要按s如下方式覆盖您的初始实例:

s = increment(s,5);

文档中的更多信息。

PS:虽然可以使用handle,但复制功能的工作方式不同,您应该注意使用它的方式。当您使用handle时,实际上您正在创建一个新地址/对 obj 的引用

于 2016-09-08T12:32:42.360 回答