Lambda来自Lambda微积分,是指编程中的匿名函数。
为什么这很酷?它允许您编写快速抛出的函数而无需命名它们。它还提供了写闭包的好方法。有了这种能力,您就可以做这样的事情。
Python
def adder(x): return lambda y: x + yadd5 = adder(5)add5(1)6
从Python片段中可以看到,函数加法器接受一个参数x,并返回一个匿名函数(即lambda),该函数接受另一个参数y。该匿名函数使您可以从函数创建函数。这是一个简单的示例,但是它应该传达出lambda和闭包所具有的功能。
其他语言的例子
Perl 5
sub adder { my ($x) = @_; return sub { my ($y) = @_; $x + $y }}my $add5 = adder(5);print &$add5(1) == 6 ? "okn" : "not okn";
Javascript
var adder = function (x) { return function (y) { return x + y; };};add5 = adder(5);add5(1) == 6
Javascript(ES6)
const adder = x => y => x + y;add5 = adder(5);add5(1) == 6
方案
(define adder (lambda (x) (lambda (y)(+ x y))))(define add5 (adder 5))(add5 1)6
C#3.5或更高
Func<int, Func<int, int>> adder = (int x) => (int y) => x + y; // `int` declarations optionalFunc<int, int> add5 = adder(5);var add6 = adder(6); // Using implicit typingDebug.Assert(add5(1) == 6);Debug.Assert(add6(-1) == 5);// Closure exampleint yEnclosed = 1;Func<int, int> addWithClosure = (x) => x + yEnclosed;Debug.Assert(addWithClosure(2) == 3);
Swift
func adder(x: Int) -> (Int) -> Int{ return { y in x + y }}let add5 = adder(5)add5(1)6
PHP
$a = 1;$b = 2;$lambda = fn () => $a + $b;echo $lambda();
Haskell
(x y -> x + y)
Java看到这篇文章
// The following is an example of Predicate : // a functional interface that takes an argument // and returns a boolean primitive type.Predicate<Integer> pred = x -> x % 2 == 0; // Tests if the parameter is even.boolean result = pred.test(4); // true
Lua
adder = function(x) return function(y) return x + y endendadd5 = adder(5)add5(1) == 6 -- true
Kotlin
val pred = { x: Int -> x % 2 == 0 }val result = pred(4) // true
Ruby
Ruby稍有不同,因为您不能使用与调用函数完全相同的语法来调用lambda,但是它仍然具有lambda。
def adder(x) lambda { |y| x + y }endadd5 = adder(5)add5[1] == 6
Ruby是Ruby,它是lambda的简写形式,因此您可以这样定义
adder:
def adder(x) -> y { x + y }end
R
adder <- function(x) { function(y) x + y}add5 <- adder(5)add5(1)#> [1] 6
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)