Я изучал 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
Перевод Lambda Lambda Labda's Labda ⇐ C#
Место общения программистов C#
1739120993
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);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/22564893/obscure-compilers-lambda-expression-translation[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия