Что такое лямбда и что такое реализация в качестве примера?

Проблема здесь с вашим синтаксисом {{item[{{tableItem}}]}}, нет необходимости использовать лишнюю пару скобок. Просто используйте {{item[tableItem]}}.

6
задан 3 revs 23 May 2017 в 10:32
поделиться

6 ответов

Лямбду трудно поймать, но после того как Вы изобразили их, Вы не можете понять, почему Вы не получили ее прежде.

Lamdba являются анонимными функциями

Лямбда является обычными функциями, единственная разница - то, что Вы не даете им имя.

Понять, что, необходимо знать сначала, что при создании функции код хранится в памяти в адресе только knowned компьютером.

Таким образом, когда Вы делаете что-то как этот:

function Foo ()
{
 /* your code here */
}

То, что Вы действительно делаете, связывает имя "Нечто" с адресом кода в памяти.

Теперь, существует другой способ получить доступ к адресу: ссылки (и указатели, но позволяют нам пропустить это противные парни),

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

Как Вы используете их?

При создании функции лямбды Вы обычно планируете использовать ее только однажды.

Пошаговый процесс обычно:

  1. Создайте функцию
  2. Получите ссылку
  3. Передайте ссылку куда-нибудь, она будет использоваться

Наконец, ссылка потеряна, и таким образом, функция уничтожается автоматически.

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

Пример от реального слова

В Python можно использовать лямбду в пониманиях списка:

/* create a list of functions */
function_list = [(lambda x : number_to_add + x) for number_to_add in range(0, 10) ]

В JavaScript Вы обычно передаете функцию функциям других. Пример с JQuery:

 $("img").each(

 /* here we pass a function without any name to the "each()" method   */

 function(i){  his.src = "test"   i   ".jpg"; }

 );

Вещи необходимо знать

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

  • Длинные лямбды делают код трудно для чтения. Вот почему некоторые языки ограничивают возможности лямбд, такие как Python, который не позволяет "если" оператор в них.

  • Лямбды являются просто нормальными функциями. Где когда-либо Вы используете один, можно использовать обычную функцию вместо этого. Это - просто вопрос стиля кодирования.

12
ответ дан 8 December 2019 в 02:30
поделиться

Лямбда является средством создания анонимной функции или закрытия. На императивных языках (и функциональные) это эквивалентно разрешению вложенных функций, где внутренняя функция имеет доступ к локальной переменной и параметрам функции включения. Это найдено на функциональных языках под ключевыми словами lambda, fun, fn или даже \; в Smalltalk это называют блоком. Это также найдено в большинстве языков сценариев, например, Perl, Python, Lua, и т.д.

О единственных языках без лямбды

  • Языки без вложенных функций, как Стандарт C или Значок

  • Языки со второразрядными вложенными функциями---функция не могут быть возвращены из функции, сохранили в глобальной переменной или сохранили в выделенной "куче" структуре данных. Эта языковая семья включает Паскаля и его потомков в Modula, Ada, и семейства CLU.

Лямбда имеет важные последствия для программистов и разработчиков компилятора: больше не возможно сохранить все локальные переменные на стеке. Вместо этого некоторые переменные могут быть получены и сохранены в выделенном "куче" закрытии. Знайте, что, когда Вы пишете лямбду, Вы пишете выделение.

Пример: одна из самых простых функций является составом (синтаксис Haskell):

compose f g = \x -> f (g x)

Это говорит это compose берет две функции f и g как аргументы, и это возвращает анонимную функцию, которая берет ее аргумент x и затем применяется g и затем f кому: x. Приложение compose создает закрытие, выделенное на "куче", которая хранит значение f и g а также указатель для кодирования для тела лямбды. На языках, где лямбда распространена, такова как Haskell, ML, Caml и Схема, большое усилие было израсходовано, делая выделение ослепляюще быстро. Некоторые языки сценариев, такие как Lua, имеют необычные реализации, которые заставляют нелямбду заключить то же в корпус как на императивном языке, также делая лямбду довольно быстро. Лямбда также быстра в Smalltalk, который был также разработан к выделенному много объектов на "куче". На языках, где лямбда была модифицирована, как Perl или Java (внутренние классы связаны с лямбдой), расход может быть относительно намного выше.

В целом, если язык был разработан с лямбдами в памяти, можно использовать их так, как Вам нравится. Особенно в ML, Caml, Схеме, Haskell, даже анонимные функции являются очень дешевым---использованием большим количеством из них!

6
ответ дан 8 December 2019 в 02:30
поделиться

лямбда в мире программирования означает анонимную функцию, которая может быть передана и возвращена как любая нормальная переменная. Так называемые функциональные языки имеют их встроенный, но недавно существует растущий набор языков, поддерживающих их, так как они позволяют писать повторно используемый код. Посмотрите это, например, записанный в следующей версии C++:

// write this once...
int transform_values(int * values, int n, function<int(int)> f) {
    for(int i = 0; i < n; i++)
        values[i] = f(values[i]);
}

int values[] = { 1, 2, 3, 4 };
// ... then call it to double the values in an array
transform_values(values, 4, [](int v) { return v * 2; });

Это действительно выглядит подобным в C# и других языках, поддерживающих лямбды. Теперь существует слово "закрытие". Это означает, что лямбда может получить локальные переменные и использовать их в вычислении ее результата:

int local_variable = 5;
int values[] = { 1, 2, 3, 4 };
// ... then call it to multiply the values in an array
transform_values(values, 4, [=](int v) { return v * local_variable; });

Переменная local_variable теперь получен в закрытии и может использоваться в нем. Переменные могут также быть обновлены закрытием. Лямбды являются основой функциональных языков. Вот пример в haskell:

map (\x -> x * 2) [1, 2, 3, 4]

Сделает то же как код C++ выше. Это отображает значения в списке с помощью заданной функции (лямбда здесь) в список результата. Используя haskell, Вы видите приятно, как синтаксис привык карты для математического понятия Лямбда-исчисления.

5
ответ дан 8 December 2019 в 02:30
поделиться

Лямбда означает разные вещи для различных языков. Я знаю о них в контексте Python, но я услышал, что Python имеет другой подход, чем другие языки.

По существу, в Python, лямбда является анонимной функцией, которая может только состоять из отдельного выражения, результат которого возвращается.

Я понимаю, что на других языках, они - более обобщенные анонимные функции без ограничения отдельного выражения, но я не уверен в деталях.

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

2
ответ дан 8 December 2019 в 02:30
поделиться

Лямбда является лямбда-исчислением, но я думаю, что люди используют его с термином закрытие попеременно. Посмотрите то, Что Закрытие?

Реализацию Ruby легко понять и очень мощный. В следующем коде times метод принимает блок кода между фигурными скобками и отзывает его HEIGHT времена. Можно определить похожий метод, который принимает блок кода и вещи выхода конструкции цикличного выполнения реализации.

@cells = []
HEIGHT.times { @cells << empty_row }

Я предполагаю, что более интересно, если существует параметр.

5.times { |i| puts i, " " }
2
ответ дан 8 December 2019 в 02:30
поделиться

Лямбда является встроенным описанием функции. Это произошло из языков функционального программирования и количества других языков, которые поддерживают что-то как он, растет в эти дни. Название происходит от математической вещи под названием Лямбда-исчисление, которое влияло на языки функционального программирования (такие как Lisp), и идея лямбд прибывают из него.

Ваш вопрос зависит от языка программирования, о котором Вы говорите. Например, в F#, Вы использовали бы fun x -> x * x представить

int myfunction(int x) { return x * x; }

В C# Вы использовали бы x => x * x представить ту же функцию. Как это используется и что можно сделать с ним, в значительной степени зависит от языка, в котором Вы работаете.

Говоря о C#, большой вещью о них является способность проанализировать их как деревья выражений. Лямбда-выражение может использоваться в качестве кода, как делегат (примерно указатель функции) или как данные, в дереве выражений. Используя их как деревья выражений, сделайте библиотеки, такие как LINQ к SQL, чтобы смочь использовать выражение для создания SQL-оператора, чтобы отправить серверу и получить соответствующие результаты.

9
ответ дан 8 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: