Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
2 / 2 / 0
Регистрация: 07.11.2013
Сообщений: 62
1

Непонятный синтаксис вызова функции с лямбда-аргументом

05.12.2018, 13:00. Показов 2486. Ответов 3

Author24 — интернет-сервис помощи студентам
Здравствуйте! Не могу понять как работает такой вызов функции: var x1 = Apply1(f, 100)(1, 11);
Ответьте пожалуйста, почему две пары скобок в вызове функции? Обычно я привык к одной паре.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private static Func<int, int, int> Apply1(Func<int, int, int, int> func, int arg)
        {
            return (x, y) => func(x, arg, y);
        }
        
        private static Func<int, int> Apply2(Func<int, int, int> func, int arg)
        {
            return x => func(arg, x);
        }
        
        public static void Main(string[] args)
        {
            Func<int, int, int, int>f = (x, y, z) => x * y + z;
            var x0 = f(1, 2, 3);
            var x1 = Apply1(f, 100)(1, 11); // ? 100*1+11 ?
                    
            var g = Apply2(Apply1(f, 10), 5);
            var x2 = g(3);
 
            Console.WriteLine("x0 = " + x0);
            Console.WriteLine("x1 = " + x1);
            Console.WriteLine("x2 = " + x2);
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2018, 13:00
Ответы с готовыми решениями:

Непонятный undefined после вызова функции
Объясните пожалуйста почему это вообще работает и почему вторым алертом выводит undefined у меня...

Непонятный синтаксис определения функции
Только начал изучать ноду, есть куча вопросов, не знаю куда обратится, может тут помогут. Для...

Функции. Синтаксис объявления и вызова
1. Написать функцию, которая вычисляет Вариант Задание 1 площадь круга S по его радиусу R...

Объясните синтаксис вызова шаблонной функции
Привет, сижу, читаю я такой книжку, ок да? и вижу вот это: #include &lt;iostream&gt; #include...

3
899 / 554 / 275
Регистрация: 26.11.2015
Сообщений: 1,758
Записей в блоге: 2
05.12.2018, 13:04 2
Лучший ответ Сообщение было отмечено Djey40 как решение

Решение

Потому что вторая пара скобок - это вызов той функции, которую "вернули первые скобки"
Можно записать так:
C#
1
2
var function = Apply1(f, 100);
var x1 = function(1,11);
1
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
05.12.2018, 13:06 3
Лучший ответ Сообщение было отмечено Djey40 как решение

Решение

Всмысле почему?!

Вызвали
C#
1
Apply1(f, 100)
получили от неё другую функцию
C#
1
private static Func<int, int, int> Apply1
и сразу её вызвали с аргументами 1 и 11
C#
1
(1, 11);
и в
C#
1
var x1 =
будет результат от второй функции
1
2 / 2 / 0
Регистрация: 07.11.2013
Сообщений: 62
05.12.2018, 14:23  [ТС] 4
Спасибо всем ответившим! Начинаю понимать. Т.е. в данном конкретном случае вернётся результат вычисления: 1 * 100 +11.
0
05.12.2018, 14:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2018, 14:23
Помогаю со студенческими работами здесь

Error LNK2001 из-за вызова процедуры со строковым аргументом - в чем причина?
Помогите, пожалуйста. Вызываю процедуру из основной программы, аргумент - строка:...

Нерекурсивная программа в форме лямбда-вызова
Дан числовой список х. Имеют ли три первых элемента списка одинаковую четность?

Непонятный синтаксис
Объясните, пожалуйста, примерно такой код:...

Непонятный синтаксис.
В VC 2010 вместо int main(int argc, char *argv) написано int WINAPI WinMain(HINSTANCE hInstance,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru