Unterprogramme als Argumente

static int d ( Func<int,int> g ) { 
    return g(g(1));              }
static int p (int x) {
    Func<int,int> f = y => x + y;
    return d (f);                }

Betrachte Aufruf p(3) mathend000#.

Das innere Unterprogramm f mathend000# muß auf den p mathend000#-Frame zugreifen, um den richtigen Wert des x mathend000# zu finden.

Dazu Closure konstruieren: f mathend000# mit statischem Vorgänger.

Wenn Unterprogramme als Argumente übergeben werden, steht der statische Vorgänger im Stack.

(ansonsten muß man den Vorgänger-Frame auf andere Weise retten, siehe später)



Johannes Waldmann 2014-03-31