【问题标题】:matlab oop reset propertymatlab oop 重置属性
【发布时间】:2013-12-17 05:47:19
【问题描述】:

我尝试从类函数内部从 matlab 类属性向量中删除一个条目。正确的元素会被删除,但旧条目不会被覆盖。

这是我的课:

classdef unknownPoints    
    properties
        points;
    end

    methods
        function removePoint(obj, num)
            points = obj.points(obj.points ~= num)  [1]
        end
    end
end

我是这样称呼的:

up = unknownPoints();
up.points = [up.points 3];
up.points = [up.points 2];
up.points = [up.points 7];
up.removePoint(3);
up.points   [2]

结果是:

points = 2     7        <-- from inside the method    [1]
ans    = 3     2     7  <-- and that how it looks like from outside [2]

我希望从外部读取的内容类似于第一个 => [2, 7] 结果,但似乎 'points' 属性没有被覆盖。 我做错了什么?

【问题讨论】:

  • 请使用推荐将[1] 等信息添加到您的代码中。而是使用%[1]

标签: matlab oop properties


【解决方案1】:
classdef unknownPoints < handle   
    properties
        points;
    end

    methods
        function removePoint(obj, num)
            obj.points = obj.points(obj.points ~= num)
        end
    end
end

您创建了一个局部变量points,而不是修改对象变量。

【讨论】:

  • 我修正了我的答案。您打算使用对象的方式,您必须使用超类handle。详情在这里:mathworks.de/de/help/matlab/ref/handle.html
  • 谢谢你的作品。我之前尝试过 obj.points,但它并没有改变任何从 handle 继承的东西。如果我还不明白它的作用,这似乎也是重点
  • 如果您习惯了其他 oo 编程语言,handle 基本上会创建与对象崇敬类似的行为。试试:`x=ExampleClass,y=x,x.a=1,'。如果 Exampleclass 实现了句柄,则 y 也是同一个实例,并且都被修改了。如果不是,y 保持不变。
猜你喜欢
  • 2015-07-21
  • 1970-01-01
  • 2015-07-01
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多