主要内容

このページの翻訳は最新ではありません。ここをクリックして,英语の最新版を参照してください。

入れ子关数

入れ子关数とは

入れ子关数は,亲关数内に完全に含まれている关数です。プログラムファイル内の关数は,入れ子关数を含むことができます。

たとえば,父母という以下の关数は,nestedfxという入れ子关数を含んでいます。

功能父DISP(“这是父功能”)nestedfx功能nestedfx DISP(“这是嵌套的函数”结尾结尾

入れ子关数と他の种类の关数の主な违いは,入れ子关数は自身の亲关数で定义された変数にアクセスして変更できるということです。その结果,

  • 入れ子关数は,入力引数として明示的に渡されていない変数を使用できます。

  • 亲关数で,入れ子关数の実行に必要なデータをもつ入れ子关数のハンドルを作成できます。

入れ子关数の必要条件

  • 通常,关数には结尾ステートメントは不要です。ただし,プログラムファイルで关数を入れ子にするには,そのファイル内の“すべての”关数で结尾ステートメントを使用しなければなりません。

  • 如果/ ELSEIF /其他开关/箱为了尽管试着抓など,MATLAB®の任意のプログラムコントロールステートメント内で,入れ子关数を定义することはできません。

  • 入れ子关数は(fevalを使用せずに)名前で直接呼び出すか,または(str2funcではなく)@演算子を使って作成した关数ハンドルで呼び出さなければなりません。

  • 入れ子关数またはそれを含む关数内の変数は,すべて明示的に定义しなければなりません。したがって,変数に値を代入する关数やスクリプトを呼び出すには,关数ワークスペースにその変数が既に存在していなければなりません。(详细は,エラーの解决:静的なワークスペースへの変数追加の试みを参照)

亲关数と入れ子关数间での変数の共有

一般に,ある关数ワークスペース内の変数を别の关数で使用することはできません。ただし,入れ子关数は,自身を含む关数のワークスペースにある変数にアクセスして変更することができます。

つまり,入れ子关数と亲关数の双方は,同じ変数を引数として渡すことなく変更できます。たとえば,关数MAIN1およびMAIN2のそれぞれでは,メイン关数と入れ子关数ともに変数Xにアクセスできます。

功能MAIN1 X = 5;nestfun1功能nestfun1 X = X + 1;结尾结尾
功能MAIN2 nestfun2功能nestfun2 X = 5;结尾X = X + 1;结尾

所定の変数が亲关数で使用されない场合は,入れ子关数のローカル変数として扱われます。たとえば次の关数主要的では,2つの入れ子关数にそれぞれ独自バージョンのXがあり,その相互対话は不可能です。

功能主要nestedfun1 nestedfun2功能nestedfun1 X = 1;结尾功能nestedfun2 X = 2;结尾结尾

出力引数を返す关数は,ワークスペースに出力用の変数をもっています。ただし,亲关数は,入れ子关数の出力変数を明示的に要求した场合のみ,その出力変数をもちます。たとえば,この关数parentfunは,ワークスペースに変数y“もちません”

功能parentfun X = 5;nestfun;功能Y = nestfun Y = X + 1;结尾结尾

コードを以下のように変更すると,変数Z.parentfunのワークスペースに入るようにます。

功能parentfun X = 5;Z = nestfun;功能Y = nestfun Y = X + 1;结尾结尾

ハンドルを使用した关数パラメーターの格纳

入れ子关数は3つのソースから変数を使用できます。

  • 入力引数

  • その入れ子关数内で定义された変数

  • 亲关数で定义された変数。“スコープ外の”変数とも呼ばれます。

入れ子关数の关数ハンドルを作成する场合,そのハンドルはその关数名のほかに,スコープ外の変数の値も格纳します。

たとえば,makeParabola.mというファイルに新しい关数を作成します。この关数はいくつかの多项式系数を受け取り,その多项式の値を计算する入れ子关数のハンドルを返します。

功能P = makeParabola(A,B,C)P = @parabola;功能Y =抛物线(X)Y = A * X ^ 2 + B * X + C。;结尾结尾

关数makeParabolaは,系数一种B.およびCの値を含む关数抛物线のハンドルを返します。

コマンドラインで,系数値1.30.2および30.を指定して关数makeParabolaを呼び出します。返された关数ハンドルP.を使用して特定の点で多项式を评価します。

P = makeParabola(1.3,.2,30);X = 25;Y = P(X)
Y = 847.5000

多くのMATLAB关数は关数ハンドル入力を受け取って値の范囲で关数を评価します。たとえば,放物型方程式を-25+25の范囲でプロットします。

fplot(P,[ -  25,25])

さまざまな多项式系数を使用する复数の关数抛物线のハンドルを作成できます。

firstp = makeParabola(0.8,1.6,32);secondp = makeParabola(3,4,50);范围= [-25,25]。身材保持fplot(firstp,范围)fplot(secondp,范围,'R:') 抓住离开

入れ子关数の可视性

それぞれの关数には,一定の“スコープ”があります。スコープとは,その关数から见える一连の他の关数です。入れ子关数は,以下の方法で使用できます。

  • 入れ子关数の1つ上のレベルから呼び出す(次のコードでは,关数一种B.またはD.は呼び出せますが,CE.は呼び出せません)。

  • 同じ亲关数内にある同じレベルの入れ子关数から呼び出す(关数B.D.を,そしてD.B.を呼び出せます)。

  • 下位レベルの关数から呼び出す(关数CB.またはD.を呼び出せますが,E.は呼び出せません)。

    功能A(X,Y)% 主功能B(X,Y)d(y)的功能B(X,Y)%在嵌套C(X)d(y)的功能C(x)的%在乙嵌套d(x)的结尾结尾功能d(x)的%在嵌套前任)功能前任)%嵌套在dDISP(x)的结尾结尾结尾

入れ子关数のスコープを拡张する最も简単な方法は,ハンドルを使用した关数パラメーターの格纳で说明されているように,关数ハンドルを作成してそれを出力引数として返すことです。入れ子关数を呼び出すことができる关数のみが,入れ子关数へのハンドルを作成できます。

关连するトピック