在Matlab函数中存储变量

时间:2012-03-27 14:23:33

标签: function matlab

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

我尝试使用:

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

但每次都会更换价值。

如何在此函数中存储obj.turns的值?每次调用函数时,值都会更改。

3 个答案:

答案 0 :(得分:4)

如果我正确理解你想要的东西,你应该使用persistent variable。这是一个例子:

function abc = calculate(obj)

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

  ag = storedTurns*d/c;
  ...

end

第一次拨打calculate时,obj.turns中的值将被放入storedTurns。每次调用calculate时,该值都将保持不变,从而忽略了传入的变量obj中可能存在的任何新值。

答案 1 :(得分:0)

对于一个持久变量(存在于函数范围之外的变量),就像你需要的变量一样,你需要创建另一个类属性来保存它,或者更新现有对象,如本例所示。

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

这是一个增加x值的简单函数。重要的细节是函数也返回对象。

或者,您可以使您的类成为句柄类的子类。然后在适当的位置修改对象属性,这样您就可以使用以下内容。 。 。

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

答案 2 :(得分:0)

有一些事情可以做。

将所有变量传入函数(首选方法)。

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);