Перевод Lambda Lambda Labda's LabdaC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Перевод Lambda Lambda Labda's Labda

Сообщение Anonymous »

Я изучал комбинатор Y (с использованием C# 5.0) и был весьма удивлен, когда этот метод: < /p>

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

... был переведен компилятором на это: < /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>

Итак, второй класс вложен, а первый класс не доступен для сборки мусора, в то время как мы используем делегат, который ссылается на Second.curry. В то же время все, что нам нужно в первом классе, - это function . Может быть, мы можем скопировать его (делегат) во второй класс, а затем можно собрать первый класс? Да, мы также должны сделать второй класс, не завязанный, но кажется, что это нормально. Как я знаю, делегаты копируются «по значению», так что я могу предположить, что это довольно медленно, но в то же время мы копируем FirstParameter ?! Итак, может быть, кто -то может объяснить, почему компилятор делает все это?)
Я говорю о чем -то подобном: < /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);
}
}


Подробнее здесь: https://stackoverflow.com/questions/225 ... ranslation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Перевод Lambda Lambda Labda's Labda
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Перевод поведения и связанный с ним перевод модели
    Anonymous » » в форуме Php
    0 Ответы
    65 Просмотры
    Последнее сообщение Anonymous
  • Перевод строки C++ преобразован в возврат каретки и перевод строки
    Anonymous » » в форуме C++
    0 Ответы
    75 Просмотры
    Последнее сообщение Anonymous
  • AWS Lambda (.NET) + SQS: ошибка преобразования полезных данных JSON события Lambda в строку
    Anonymous » » в форуме C#
    0 Ответы
    87 Просмотры
    Последнее сообщение Anonymous
  • Почему Task.Factory.StartNew для Async Lambda Work, когда на вызов Lambda напрямую нет?
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»