Хранение переменных внутри функции Matlab - PullRequest
0 голосов
/ 27 марта 2012
function abc= calculate(obj)
ag=obj.turns*d/c;
end

Я пытался использовать:

temp=num2cell(obj.turns)
            s=temp{:}

Но значение заменяется каждый раз.

Как я могу сохранить значение obj.turns в этой функции?Значение изменяется каждый раз, когда вызывается функция.

Ответы [ 3 ]

4 голосов
/ 27 марта 2012

Если я правильно интерпретирую то, что вы хотите, вы должны использовать постоянную переменную .Вот пример:

function abc = calculate(obj)

  persistent storedTurns;
  if isempty(storedTurns)
    storedTurns = obj.turns;
  end

  ag = storedTurns*d/c;
  ...

end

При первом вызове calculate значение в obj.turns будет помещено в storedTurns.Это значение будет оставаться неизменным при каждом следующем вызове calculate, игнорируя с этого момента все новые значения, которые могут присутствовать в переменной obj, которую вы передаете.

0 голосов
/ 27 марта 2012

Есть несколько вещей, которые можно сделать.

Передать все переменные в функцию (предпочтительный метод).

function ag= calculate(obj,d,c)
ag=obj.turns*d/c;
end

Использовать глобальные переменные.Это может быть очень запутанным, и поэтому не рекомендуется.

function calculate(obj)
global ag,d,c
ag=obj.turns*d/c;
end

И еще какой-то код:

function start
global ag,d,c
c=1;d=3;
calculate(obj)
fprintf('%i',ag);
0 голосов
/ 27 марта 2012

Для постоянной переменной (которая существует за пределами функции), такой как та, которая вам требуется, вам нужно либо создать другое свойство класса для его хранения, либо обновить существующий объект, как в этом примере.

function obj = increment_x(obj) 
    obj.x=obj.x+1;
end

Это простая функция, которая увеличивает значение x. Важной деталью является то, что функция также возвращает объект.

Кроме того, вы можете сделать свой класс подклассом класса handle. Свойства объекта затем изменяются на месте, так что вы можете получить что-то вроде следующего. , ,

function increment_x(obj) 
    obj.x=obj.x+1;
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...