2015-09-11 3 views
1

Я пытаюсь получить доступ к свойству класса из функции метода. Когда я изменяю свойство из конструктора, вызывается сеттер и свойство изменяется. Но когда я изменяю свойство из другого метода, свойство возвращается к предыдущему значению, когда функция завершается, даже если сеттер вызывается снова.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 = случайный; >> a a = случайный со свойствами: x: 2 >> a.foo (1) – therman

ответ

1

Кто-то поправьте меня, если я ошибаюсь, но я предполагаю, 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

Смежные вопросы