Todo
已经实现的特性会从本文档中移出。
Extend Method 拓展方法
头脑风暴
random => ( l ) {
index = Random.nextInt( l.size() );
return l.get(index);
}
post => ( e ,extra ) {
result = HttpClient.post( e.url, e.params, extra);
return result;
}
workResult => ( type, result, printFlag ) {
if (type == 1 ){
// do something
if( printFlag ) {
print(result);
}
}
}
getList => () {
l = new List();
// 省略添加元素
return l;
}
// __extend [class] __with [method list]
// 添加拓展方法给某个具体得类
__extend List __with filter printList;
getList().random().post( "no-extra!" ).workResult(1, $?, false);
基本规则有:
当一个拓展方法和本对象的方法重名的时候, 会调用本对象的方法,而忽略扩展方法
声明一个拓展方法 并不需要什么特别的标识
任何非类内部的方法 都会视为拓展方法笔者觉得这样似乎会产生巨大得性能消耗。。寻找拓展方法会按照顺序查找, 当存在多个同名的方法的时候, 会使用最先找到的方法。当拓展方法重复得时候,会进行报错
参数的传递规则:
如果拓展方法只有一个参数, 则自动传入当前对象。
如果拓展方法有两个及以上的参数个数, 则对比传入参数的个数。
当个数相同的时候, 则会忽略当前对象,直接传入具体的参数值。
当个数不同的时候, 则会将方法的第一个参数 传入为当前对象,其他参数依次向后追加。
闭包
虽然我也不知道闭包是啥。。 但是应该就是类似的这个东西把。。
目前函数内部能返回lambda
表达式, 但是带有参数变化的闭包 没有办法实现。
// 创建一个 闭包
funcCreate => (){
myVar = 2;
return a => {
println("myVar: " + myVar);
tmp = a * myVar;
println(" in close pkg, a.. : " + tmp
);
} ;
}
funcA = funcCreate();
// 如果这里没有给myVar赋值 则会报错
myVar = 5;
funcA( 5 );
变量空间的封闭
目前变量可以穿透生命周期的限制, 如果不需要这个特性,则需要编写大量的 local
声明, 这违背了我想快速开发的原则。。
目前有两个标记 可以控制 变量,函数,类的访问。
restrict
是否对当前环境限定, 在限定之后,则不会去父级环境查找close
当前环境是否关闭, 如果关闭,则不允许别的环境引用当前环境的变量
在合适的时机需要对这部分代码进行重构, 附加函数返回值部分的代码。
下面内容仍然需要考虑一下
并添加 ref
关键字的特性,使之能引用外部的变量。 或者使用 *
操作符来引用。
outNumber = 10;
outString = "hello";
func => (){
// 引用 外部的变量
ref outNumber,outString;
println(outNumber); // 10
println(outString); // hello
outNumber = 5;
outString = "world";
}
func();
println(outNumber); // 5
println(outString); // world
local 声明的变量在环境解除的时候也删掉内存使用
Last updated
Was this helpful?