Obskure Compiler's Lambda Expression TranslationC#

Ein Treffpunkt für C#-Programmierer
Guest
 Obskure Compiler's Lambda Expression Translation

Post by Guest »

Ich habe Y -Kombinator (mit C# 5.0) studiert und war ziemlich überrascht, wenn diese Methode: < /p>

Code: Select all

public static  Func Curry ( this Func f)
{
return a => b => f(a, b);
}
< /code>

... wurde vom Compiler in dies übersetzt: < /p>

public static Func Curry(this Func f)
{
first local = new first();
local.function = f;
return new Func(local.Curry);
}
private sealed class first
{
private sealed class second
{
public first ancestor;
public T1 firstParameter;
public TOut Curry(T2 secondParameter)
{
return ancestor.function(firstParameter, secondParameter);
}
}
public Func function;
public Func Curry(T1 firstParameter)
{
second local = new second();
local.ancestor = this;
local.firstParameter = firstParameter;
return new Func(local.Curry);
}
}
< /code>

Die zweite Klasse ist also verschachtelt und die erste Klasse ist für die Müllsammlung nicht verfügbar, während wir Delegate verwenden, die auf Second.curry verweisen. Gleichzeitig ist alles, was wir in der ersten Klasse brauchen, [b] Funktion [/b]. Vielleicht können wir es (Delegierter) in die zweite Klasse kopieren und dann könnte die erste Klasse gesammelt werden? Ja, wir sollten dann auch die zweite Klasse nicht abnestet machen, aber es scheint, dass das in Ordnung ist. Wie ich weiß, werden die Delegierten nach Wert "kopiert", damit ich vorschlagen kann, dass es ziemlich langsam ist, aber gleichzeitig kopieren wir [b] FirstParameter [/b]?! Vielleicht könnte jemand erklären, warum der Compiler all diese Dinge tut?)
Ich spreche über so etwas: < /p>

private sealed class first
{
public Func function;
public Func Curry(T1 firstParameter)
{
second local = new second();
local.function = function;
local.firstParameter = firstParameter;
return new Func(local.Curry);
}
}
public sealed class second
{
public T1 firstParameter;
public Func function;
public TOut Curry(T2 secondParameter)
{
return function(firstParameter, secondParameter);
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post