函数闭包-Go&Java
-目录-
函数闭包概念
闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)。 在本质上,闭包是将函数内部和函数外部连接起来的桥梁,通过它可以修改函数的内部的变量。
闭包实现
在Go里,使用匿名函数实现。可见内部匿名函数被推出到外部后,就可以改变内部值。
package main
import "fmt"
// 实现斐波那契数列
func fibonacci() func() int {
a:=0
b:=1
return func() int {
temp:=b
b=a+b
a=temp
return a
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
// 输出1 1 2 3 5 ...
////非闭包实现
//import "fmt"
//
//func main() {
// a:=1
// b:=1
// for i := 0; i < 10 ;i++{
// fmt.Println(a)
// temp:=b
// b=a+b
// a=temp
// }
//}
JAVA里的闭包,可以用匿名内部类实现。但是和Go不一样。
public class TestC {
public static void main(String[] args) {
Inner inner = new TestC().addA();
System.out.println(inner.add(3));
}
Inner addA() {
int a = 1;
int b = 1;
return new Inner() {
// 可以获取原函数内的变量但不可读取
// 这是和Go不同的地方
// a = 3;是错的
@Override
public int add(int c) {
return a + b + c;
}
};
}
}
interface Inner {
int add(int c);
}