2012-03-27 12 views
-2
function abc= calculate(obj) 
ag=obj.turns*d/c; 
end 

私が使用してみました:保存する変数のMatlab

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

をしかし、値は毎回交換されます。

obj.turnsの値をこの関数に保存するにはどうすればよいですか?関数が呼び出されるたびに値が変更されます。

+0

上記のコードは壊れています(「ag」はどこですか? 「d」と「c」はどこから来たのか?)そして、あなたが "関数に変数を格納する"という意味ははっきりしません。パラメータとして渡しているので、なぜそれを "格納"する必要がありますか? –

+0

agは次の関数で使用され、回路パラメータを計算します。これらのシンボルはすべて、値を変更するオブジェクトに対応しています。私が望むのは、obj.turnsの値をこの関数ではなくメインのmファイルにプロットすることです。 – mirage

+4

関数の意味を理解しているとは思えません。なぜなら、それはまったく意味がないからです。 –

答えて

0

必要なもののような永続変数(機能の範囲外にある変数)を保持するには、別のクラスプロパティを作成するか、この例のように既存のオブジェクトを更新する必要があります。

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

これは、xの値をインクリメントする単純な関数です。重要な詳細は、関数がオブジェクトを返すことです。

また、クラスをハンドルクラスのサブクラスにすることもできます。オブジェクトのプロパティは、その場で変更されるので、次のようなもので取り除くことができます。 。 。

function increment_x(obj) 
    obj.x=obj.x+1; 
end 
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); 
+0

dとcは実際にはオブジェクトobj.m_cross_sectionとobj.m_inductanceです。それらをグローバルに宣言すると、下に赤い線が表示されます – mirage

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には無視されます。

関連する問題