2015-09-11 110 views
1

我想从一个方法函数内访问一个类属性。当我从构造函数修改属性时,调用者被调用并且属性被更改。但是,当我从另一个方法修改属性时,即使函数被终止,属性也会恢复为先前的值,即使再次调用setter也是如此。从类方法的Matlab设置属性

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

的代码如下:

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 
+0

你可能会发布代码,你使用该类,所以我们可以重现该问题? – RPM

+0

我只是简单地调用构造函数。然后,如果我显示'a'的值,那就不正确。 >> a = random; >> a a = 随机附属性: x:2 >> a.foo(1) – therman

回答

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 
+0

谢谢,这对我有帮助。我在脑海中想着类似的东西,但无法解决问题。 – therman

+0

我记得很清楚,因为当我遇到这个问题时,我花了几个小时才弄清楚了这一点。 – ninehundred

+0

我遇到的另一个错误是classdef名称包含下划线。在这种情况下,当构造函数试图调用其他方法时,会显示一个错误,表示找不到函数。 我一直在努力奋斗那一整天! – therman