2015-09-11 109 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