【问题标题】:Matlab set property from class methodMatlab从类方法中设置属性
【发布时间】:2015-12-08 01:04:25
【问题描述】:

我正在尝试从方法函数中访问类属性。当我从构造函数修改属性时,会调用 setter 并更改属性。但是当我从另一个方法修改属性时,当函数终止时,即使再次调用 setter,属性也会恢复到以前的值。

我的代码有什么问题,请帮助我! 谢谢

代码如下:

 classdef random
    properties
        x
    end

    methods
        function obj=random(obj)
            obj.x = 2
            obj.foo(1)
            obj %output x:2, but it should be 1!
        end
        function foo(obj,A)           
            obj.x = A;
            obj %output x:1
        end
        function obj = set.x(obj,newVal)
            obj.x = newVal;
        end
    end
 end

【问题讨论】:

  • 您能否将代码贴在您使用该类的地方,以便我们重现问题?
  • 我只是调用构造函数。然后,如果我显示'a'的值,它是不正确的。 >>a = 随机; >>a a = 随机属性:x: 2 >>a.foo(1)

标签: matlab function class methods properties


【解决方案1】:

如果我错了,有人纠正我,但我假设 foo 中的 obj 是按值传递的。所以它确实在该函数空间内更新但没有返回。所以有效的是让它返回对象并在构造函数中捕获它。试试:

classdef random
  properties
      x
  end

  methods
      function obj=random(obj)
          obj.x = 2;
          obj = obj.func1(4);
          disp(obj.x);
      end
      function [obj] = func1(obj,A)           
          obj.x = A;
          disp(obj.x);
      end
      function obj = set.x(obj,newVal)
          obj.x = newVal;
      end
  end
 end

【讨论】:

  • 谢谢,这有帮助。我在想类似的事情,但无法解决问题。
  • 我记得很清楚,因为当我遇到这个问题时,我自己花了好几个小时才弄清楚。
  • 我遇到的另一个错误是 classdef 名称包含下划线。在这种情况下,当构造函数试图调用另一个方法时,会显示一个错误,即找不到该函数。我整天都在为此苦苦挣扎!
猜你喜欢
  • 2011-07-16
  • 2018-05-12
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 2013-10-30
  • 1970-01-01
  • 2021-10-19
相关资源
最近更新 更多