0

matlab関数でやりたいことが2つあります。一連のファイルからデータを取得する関数があります。私がこのファイル構造を持っているとしましょう:

番号1:

関数内のいくつかの選択された変数がグローバルにアクセス可能になり、関数が完了した後も存続できるようにしたいと思います。つまり、私は次の機能を持っていると言います:

[] = function(directory)
    b = read(directory)
    struct c = (do some stuff with b)
    somehow globalise c
end

変数を持って渡すことができることを理解していますが、これはしたくありc = function(directory)ません。むしろ、変数cがグローバルスコープに存続することを望んでいます。これはできますか?

2番:

matlab関数がデフォルトの引数を持つことは可能ですか?上から関数を取りましょう。私がやりたいのは、ディレクトリを現在のディレクトリとしてデフォルトにすることです。たとえば、次のデータ構造が存在する場合:

 MatlabMainFolder
    -> MatlabFunctions
    -> Data 

ユーザーはfunctionDataで実行でき、Dataディレクトリを使用する必要がありますがfunction('../Data')、同じ効果を得るためにMatlabFunctionsから直接実行できる必要もあります。これは可能ですか?

4

2 に答える 2

2

初め:

以下は、変数を関数内からグローバルにアクセスできるようにする必要があると思います。

[] = function(directory)
    b = read(directory)
    global c;           <------
    struct tmp = (do some stuff with b)
    c = tmp;            <------
end

次に、使用する前に、使用可能にしglobal cたい他のすべてのファイルを追加します。cただし、可能であればそのまま使用することをお勧めしc = function...ます。

@Ben で提案されassigninているように、変数を別のワークスペースに割り当てるためにも使用できます。このようにして、関数から任意の変数を'base'ワークスペースに割り当てることができます。ワークスペースは、他のすべてのファイルからもアクセスできるワークスペースです。この場合:

assignin('base','c',c)

関数ファイルcと同じ値で、ベース ワークスペースに変数を作成します。c(この行を関数の最後に追加します)。

2番:

次のようなことができます。

function(path)
    if nargin<1
         path = '../Data';
    end

    % do things with path
end

このように、functionが入力なしで呼び出された場合はデフォルト パス../Dataが使用され、それ以外の場合は入力として指定されたパスが使用されます。nargin入力として与えられた引数の数に等しくなります。

于 2013-02-21T03:54:42.700 に答える
1

1) グローバルとアサインインはしばしば嫌われます。使用することもできますpersistent

擬似コード スニペット:

function out=fun((directory)
persistent out
if isempty(out) 
   fill out

return out;

または、モダンになりたい場合はオブジェクトを処理することもできます ;)

2): について読んdoc InputParserでください - 他の多くの言語よりも手間がかかりますが、可能です。

于 2013-02-21T10:09:49.140 に答える