Анонимна функция: Разлика между версии
Изтрито е съдържание Добавено е съдържание
м замяна на чужда езикова препратка |
м Бот: Форматиране на ISBN; козметични промени |
||
Ред 109:
Къринг е техника на промяна на логиката на изчисление от една функция, която приема множество от аргументи (или кортеж) към серия от функции, които приемат по точно един аргумент. В този случай за пример е дадена трансформация на функция за деление с произволно цяло число към функция за деление с точно определено цяло число.<syntaxhighlight lang="python">
>>> def divide(x, y):
...
>>> def divisor(d):
...
>>> half = divisor(2)
Ред 368:
=== C# ===
Поддръжката на анонимни функции в [[C#]] се е задълбочила през различните версии на компилатора на езика. C # езикът v3.0 В, излязъл през ноември 2007 г. с .NET Framework-а v3.5, има пълна поддръжка на анонимни функции.
// <see href="http://msdn.microsoft.com/en-us/library/bb549151.aspx" />
Func<int,int> foo = x => x*x;
Ред 381:
var values = new List<int>() { 7, 13, 4, 9, 3 };
// Map the anonymous function over all elements in the list, return the new list
var foo = values.ConvertAll(d => d*d) ;
// the result of the foo variable is of type System.Collections.Generic.List<Int32>
</syntaxhighlight>
Предишните версии на C# са имали по-ограничена поддръжка на анонимните функции. C# v1.0, въвежда през февруари 2002 г. с .NET Framework v1.0, предоставянето на частична поддръжка на анонимните функции чрез използването на [[Https://en.wikipedia.org/wiki/Delegate (CLI)|делегати(delegates)]]. Тази конструкция е в известна степен подобНа на PHP делегатите. В C# 1.0, делегатите са като указатели на функции, които се отнасят до определен метод в рамките на един клас. (Но за разлика от PHP името не се изисква в момента на използване на делегата.)
C# v2.0, издаден през ноември 2005 г. с .NET Framework v2.0, въвежда концепцията за анонимни методи, като начин да пишат неименувани инлайн блокове изявление(inline statement blocks), които могат да бъдат изпълнени чрез
извикване на делегат(delegate invocation). C# 3.0 продължава да поддържа тези конструкции, но също така поддържа и експресивната ламбда конструкция.
Ред 427:
</source>
В случай, че версията на C# е 2.0, С# компилаторът взима блока код на анонимната функция и създава
В случай, че версията на C# е 3.0, се прилага същия механизъм.<syntaxhighlight lang="javascript">
Ред 440:
</syntaxhighlight>В [[ES6]]:<syntaxhighlight lang="javascript">
alert((x => x*x)(10));
</syntaxhighlight>Тази технология се използва по-често в [[Bookmarklets]]. За пример, за да сменим заглавието на текущия документ (видим в главния бар на прозореца) в
javascript:document.title=location.href;
</syntaxhighlight>Въпреки това, като зададена задача връща (собственото URL), много браузъри създават нова страница, за да изведат тази стойност.
Вместо анонимна функция, която не връща
javascript:(function(){document.title=location.href;})();
</syntaxhighlight>Отчетът за функция в първата (външна) двойка скоби заявява анонимна функция, която след това се изпълнява, когато се използва с последната двойка скоби. Това е почти еквивалентна на следната информация, която е обкръжена с f за разлика от анонимна функция.<syntaxhighlight lang="javascript">
Ред 456:
=== Julia ===
В
julia> f = x -> x*x; f(8)
64
Ред 464:
=== Lisp ===
[[Lisp]] и [[Scheme]] поддържат анонимните функции изпозвайки „ламбда“ конструкции, което е препратка към
(lambda (arg) (* arg arg))
</syntaxhighlight>
Ред 481:
[[Clojure]] поддържа анонимни функции чрез „Fn“ в специална форма:<syntaxhighlight lang="clojure">
(fn [x] (+ x 3))
</syntaxhighlight>Има и синтаксис
# (+ % %2 %3) ; Defines an anonymous function that takes three arguments and sums them.
</syntaxhighlight>Също като
(defn func [arg] (+ 3 arg))
</syntaxhighlight>се разширява, до:<syntaxhighlight lang="clojure">
|