1. 程式人生 > >匿名函式,子函式和巢狀函式

匿名函式,子函式和巢狀函式

一、匿名函式 anonymous function

匿名函式基本定義

fhandle = @(arglist)expr

expr 具體的函式表示式
arglist 指定的函式自變數

匿名函式的種類

(1)單變數匿名函式

f = @(x)x.^2;

含有引數、引數值已知的單個自變數的匿名函式

a = 10;
b = 20;
f = @(x)a*x + b;
f(1:6)

(2)多變數匿名函式

g = @(x,y)x.^2+y.^2;

與單變數相同
a = 1;
b = 2;
g = @(x,y)a*x + y.^b;
g(1:5;1:5) %x,y 的值一一對應

(3)單重匿名函式

只有一個@引導

(4)多重匿名函式

f = @(a,b)@(x)a*x + b

a,b 外層變數
x 內層變數

每個@符號裡的變數的作用域都是一直到表示式的結尾

二、子函式 sub-function

函式M檔案中第一個“function”引導的是主函式,呼叫檔案時總是從主函式開始執行
子函式是指在同一函式檔案中主函式之後的由“function”引導的函式,必須位於主函式之後
子函式可以被主函式和其他子函式呼叫,子函式也可以呼叫主函式,應避免死迴圈產生

三、巢狀函式 nested function

巢狀函式的定義

巢狀在函式體內部的函式
包含有巢狀函式的函式,無論是主函式、子函式或者巢狀函式,都應在末尾加上end

巢狀函式的種類

(1)單重巢狀函式

巢狀在別的函式體內部,自己的內部不再有巢狀函式

(2)多重巢狀函式

巢狀在別的函式體內,同時自己內部又巢狀這別的另一層或者幾層函式

function x = A(p1,p2)
...
    function y1 = B1(p3)
    ...
        function z1 = C1(p4)
        ...
        end
    ...
    end
...
    function y2 = B2(p5)
    ...
`       function z1 = C2(p6)
        ...
            function w = D(p7)
            ...
            end
        end
    end
end

巢狀函式的變數作用域

父函式和巢狀在其內的函式,它們各自的變數是可以拿過來直接用的,
而父函式訪問巢狀在其內的函式裡的變數則必須經過呼叫後才可以用