Анонимна функция: Разлика между версии
Изтрито е съдържание Добавено е съдържание
м замяна с n-тире |
Vodnokon4e (беседа | приноси) Редакция без резюме |
||
Ред 65:
System.out.println("40 + 2 = " + apply(40, 2, addition));
System.out.println("20 – 10 = " + apply(20, 10, subtraction));
System.out.println("10 – 20 = " + apply(20, 10, subtraction.swap()));
}
}
Ред 133:
=== Карта (Map) ===
Тази функция използва всеки елемент от списък, извиквайки функция за него. Следният пример показва функция, която повдига на квадрат всеки елемент от даден списък.
>>> a = [1, 2, 3, 4, 5, 6]
>>> print map(lambda x: x*x, a)
[1, 4, 9, 16, 25, 36]
Ред 142:
=== Филтър ===
Филтърната функция връща всички елементи от списък, които са оценени като верни, когато преминават през определена функция.
>>> a = [1, 2, 3, 4, 5, 6]
>>> print filter(lambda x: x % 2 == 0, a)
[2, 4, 6]
Ред 328:
|-
| [[Rust (programming language)|Rust]]
| Да
|-
| [[Scala (programming language)|Scala]]
Ред 368:
=== C# ===
Поддръжката на анонимни функции в [[C#]] се е задълбочила през различните версии на компилатора на езика. C # езикът v3.0 В, излязъл през ноември 2007 г. с .NET Framework-а v3.5, има пълна поддръжка на анонимни функции. В C # те се наричат „[[
// <see href="http://msdn.microsoft.com/en-us/library/bb549151.aspx" />
Func<int,int> foo = x => x*x;
Ред 377:
// will Not Compile!
var foo = (int x) => x*x;
</syntaxhighlight>Въпреки това, един ламбда израз може да вземе участие в [[type inference]] и може да се използва като [[
// Initialize the list:
var values = new List<int>() { 7, 13, 4, 9, 3 };
Ред 385:
</syntaxhighlight>
Предишните версии на C# са имали по-ограничена поддръжка на анонимните функции. C# v1.0, въвежда през февруари 2002 г. с .NET Framework v1.0, предоставянето на частична поддръжка на анонимните функции чрез използването на [[
C# v2.0, издаден през ноември 2005 г. с .NET Framework v2.0, въвежда концепцията за анонимни методи, като начин да пишат неименувани инлайн блокове изявление(inline statement blocks), които могат да бъдат изпълнени чрез
извикване на делегат(delegate invocation). C# 3.0 продължава да поддържа тези конструкции, но също така поддържа и експресивната ламбда конструкция.
Ред 399:
return d*d;
}
static void Main(string[] args)
{
// C# 1.0: Original delegate syntax required
// initialization with a named method.
SquareDelegate A = new SquareDelegate(Square);
System.Console.WriteLine(A(3));
// C# 2.0: A delegate can be initialized with
// inline code, called an "anonymous method." This
Ред 412:
SquareDelegate B = delegate(int d) { return d*d; };
System.Console.WriteLine(B(5));
// C# 3.0. A delegate can be initialized with
// a lambda expression. The lambda takes an int, and returns an int.
// The type of x is inferred by the compiler.
SquareDelegate C = x => x*x;
System.Console.WriteLine(C(7));
// C# 3.0. A delegate that accepts a single input and
// returns a single output can also be implicitly declared with the Func<> type.
System.Func<int,int> D = x => x*x;
System.Console.WriteLine(D(9));
}
}
</source>
|