【问题标题】:How to modify properties of a Matlab Object [duplicate]如何修改 Matlab 对象的属性 [重复]
【发布时间】:2010-09-21 07:39:20
【问题描述】:

我创建了一个 MATLAB 类,类似于:

classdef myclass

  properties
      x_array = [];
  end

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

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

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

>>s.x_array
ans = []

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

classdef myclass < handle

还是有什么额外的步骤?

【问题讨论】:

    标签: matlab properties matlab-class


    【解决方案1】:

    这类似于this question。总之,你应该做的就是从句柄类继承。

    快速示例

    文件 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
    

    【讨论】:

    • 打个比方,句柄类的构造函数相当于传统的python类?
    【解决方案2】:

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

    s = increment(s,5);
    

    更多信息in the documentation

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 2019-11-13
      • 2019-05-06
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      相关资源
      最近更新 更多