0

以下のコードでグローバル変数を操作します。毎回グローバル変数に保存し、その内容を保持して展開したいと考えています。出力がこの変数である関数を宣言すると、巨大な構造の場合、大幅に遅くなる可能性があると思います。どうやってするの?

function test()

    global n1;
    n1 = [1 2 3];

    for x=1:10
%     [n1] = global_up(n1,x); % no need for output parameter, as n1 is global right?
      f_up(n1,x);
    end 
end

function f_up(arg1,arg2) %function [arg1] = f_up(arg1,arg2) is wrong?
    global n1; % need to write it in every function ?
    arg1 = [arg1 arg2];
end
4

2 に答える 2

1

私はあなたが何をしようとしているのか本当に理解していませんが、グローバル変数はほぼ間違いなく進むべき道ではありません。変数をパラメーターとして渡すだけです。

   function test()

        n1 = [1 2 3];

        for x=1:10
          n1 = f_up(n1,x);
        end 
    end

function arg3 = f_up(arg1,arg2)
    arg3 = [arg1 arg2];
end

しかし、このコードの要点を説明すると、はるかに優れた解決策が得られる可能性があります。現状でf_upは実際には何もしません(つまり、すでに非常に簡潔で利点のない構文をカプセル化します)

于 2013-03-20T13:12:13.030 に答える
0

編集:実際の問題の議論のためにこの質問を検討してください:関数内の配列を変更する方法は?

あなたがしたいのは参照渡しだと思います。グローバル変数の使用は不要です。

variable がありx、その変数を関数に渡し、関数でx直接操作を実行して、これらの操作がx関数の外側に表示されるようにします。

これは と呼ばれcall by referenceます。Matlab は、単純な変数に対してはサポートしていません。

ただし、ハンドルクラスから継承したオブジェクトを使用することはできます。これにより、目的の動作が得られます。

オブジェクトを使用したくない場合は、関数で戻り引数を使用する必要があります。グローバル変数は使用しないでください。コードが読みにくくなり、ほぼ間違いなく間違いにつながる可能性があります。

于 2013-03-20T13:34:34.190 に答える