Перевод 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);
}
}

Итак, второй класс вложен, а первый класс недоступен для сбора мусора, в то время как мы используем делегат, который ссылается на Second.curry . В то же время все, что нам нужно в первом классе, - это функция . Может быть, мы можем скопировать его (делегировать) во второй класс , а затем можно было собрать первый класс ? Да, мы также должны сделать второй класс, не завязанный, но кажется, что это нормально. Как я знаю, делегаты копируются «по значению», так что я могу предположить, что это довольно медленно, но в то же время мы копируем 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 Ответы
    27 Просмотры
    Последнее сообщение 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#»