实验了以下内容:高阶函数,Currying,Lazy Evaluation,无穷流,Monad。都是很基本的东西。实现也是基于内部类的。没啥是了不起的。只是在给Lazy Evaluation造语法糖的时候,用了一下bytecode动态增强。给Lazy函数的lambda定义内部的所有的局部变量的读取操作前加了Lazy Evaluation过程。
[code]
private final static F<Boolean> TRUE = $(true);
private final static F<Integer> ONE = $(1);
private final static F<Integer> TWO = $(2);
private final static F<Integer> THREE = $(3);
private void demo() {
LF2<Integer, Integer, Integer> add = new LF2<Integer, Integer, Integer>() {
protected Integer lambda(Integer left, Integer right) {
System.out.println("calc " + left + " + " + right);
return left + right;
}
};
LF3<Boolean, Integer, Integer, Integer> select = new LF3<Boolean, Integer, Integer, Integer>() {
protected Integer lambda(Boolean arg1, Integer arg2, Integer arg3) {
if (arg1) {
return arg2;
}
return arg3;
}
};
LF1<Integer, Integer> onePlus = add._(ONE);
F<Integer> onePlusTwo = onePlus._(TWO);
F<Integer> onePlusThree = onePlus._(THREE);
System.out.println(select._(TRUE, onePlusThree, onePlusTwo)._());
}
[/code]
运行结果
[quote]
calc 1 + 3
4
[/quote]
结果分析:
1、实现了Curry(利用匿名类,绑定参数)
2、实现了Lazy Evaluation(利用载入时字节码修改,会添加进参数是否已经被求值的判断)
3、类型安全
缺点:
匿名类的语法
调用语法(用_表示调用仍然会有很多括号)
12.9:
更新为最新的语法
[code]
private final static F<Boolean> TRUE = $(true);
private final static F<Integer> ONE = $(1);
private final static F<Integer> TWO = $(2);
private final static F<Integer> THREE = $(3);
private void demo() {
LF2<Integer, Integer, Integer> add = new LF2<Integer, Integer, Integer>() {
protected Integer lambda(Integer left, Integer right) {
System.out.println("calc " + left + " + " + right);
return left + right;
}
};
LF3<Boolean, Integer, Integer, Integer> select = new LF3<Boolean, Integer, Integer, Integer>() {
protected Integer lambda(Boolean arg1, Integer arg2, Integer arg3) {
if (arg1) {
return arg2;
}
return arg3;
}
};
LF1<Integer, Integer> onePlus = add._(ONE);
F<Integer> onePlusTwo = onePlus._(TWO);
F<Integer> onePlusThree = onePlus._(THREE);
System.out.println(select._(TRUE, onePlusThree, onePlusTwo)._());
}
[/code]
运行结果
[quote]
calc 1 + 3
4
[/quote]
结果分析:
1、实现了Curry(利用匿名类,绑定参数)
2、实现了Lazy Evaluation(利用载入时字节码修改,会添加进参数是否已经被求值的判断)
3、类型安全
缺点:
匿名类的语法
调用语法(用_表示调用仍然会有很多括号)
12.9:
更新为最新的语法