Информация об изменениях

Сообщение Re[6]: Try из библиотеки LanguageExt.Core от 18.01.2022 1:43

Изменено 18.01.2022 2:03 Разраб

Re[6]: Try из библиотеки LanguageExt.Core
Здравствуйте, samius, Вы писали:

S>Ниже пример того, что в замыкании участвует именно общая переменная, а не значение на момент определения замыкания.

да, тупанул, действительно сложнее реализовать именно поведение лямбды
using static System.Console;
var x = 42;
Action<int> closure = a => { WriteLine("closure = {0}", a + x); };
Action<int> lambda = Lambda(x);
closure(5);
lambda(5);
x = 11;
closure(5);
lambda(5);

Action<int> Lambda(int a) =>
    x => { WriteLine("lambda = {0}", x + a); };

что в ILSpy выглядит
    int x = 42;
    Action<int> closure = delegate(int a)
    {
        Console.WriteLine("closure = {0}", a + x);
    };
    Action<int> lambda = Lambda(x);
    closure(5);
    lambda(5);
    x = 11;
    closure(5);
    lambda(5);
    static Action<int> Lambda(int a)
    {
        return delegate(int x)
        {
            Console.WriteLine("lambda = {0}", x + a);
        };
    }


closure = 47
lambda = 47
closure = 16
lambda = 47


Получается через лямбда-синтаксис выразить лямбду невозможно?
Re[6]: Try из библиотеки LanguageExt.Core
Здравствуйте, samius, Вы писали:

S>Ниже пример того, что в замыкании участвует именно общая переменная, а не значение на момент определения замыкания.

да, тупанул, действительно сложнее реализовать именно поведение лямбды
using static System.Console;
var x = 42;
Action<int> closure = a => { WriteLine("closure = {0}", a + x); };
Action<int> lambda = Lambda(x);
closure(5);
lambda(5);
x = 11;
closure(5);
lambda(5);

Action<int> Lambda(int a) =>
    x => { WriteLine("lambda = {0}", x + a); };

что в ILSpy выглядит
using System;

private static void <Main>$(string[] args)
{
    int x2 = 42;
    Action<int> closure = delegate(int a)
    {
        Console.WriteLine("closure = {0}", a + x2);
    };
    Action<int> lambda = Lambda(x2);
    closure(5);
    lambda(5);
    x2 = 11;
    closure(5);
    lambda(5);
    static Action<int> Lambda(int a)
    {
        return delegate(int x)
        {
            Console.WriteLine("lambda = {0}", x + a);
        };
    }
}


closure = 47
lambda = 47
closure = 16
lambda = 47


Получается через лямбда-синтаксис выразить лямбду невозможно?