Squirrel 刚发布了Squirrel3 beta2版本,一直没有时间研究它,这个周末,终于决定仔细看看。在Squirrel3 alpha的时候,就大致知道要加入Lambda表达式,不过Squirrel本来就将函数当成一个内部变量,Lambda表达式似乎意义不是很大。
Squirrel3的Lambda表达式大概是这样应用的:
exp := '@' '(' paramlist ')' exp
例如:local myexp = @(a,b) a + b
这等同于 local myexp = function(a,b) { return a + b; }
因此,这个Lambda表达式的意义也就是写法上稍微的简洁,只是不知道Alberto Demichelis在实现的时候是否对Lambda表达式做过优化。
在Squirrel3中,对Lambda的最大支持是在Array上提供了好几种内部方法,根据Alberto Demichelis的文档,增加了以下四种内部方法:
1:map(func(a)),对Array的每个元素执行func(a)函数(或者Lambda表达式),将产生的值放入一个新的数组,并返回这个数组。这个内部方法有点意思,如果从数学角度看,这相当于一个映射变换,也许不是什么革命性的东西,但可以减少代码的编写量。
2:apply(func(a)),这个内部方法的功能与map相似,只是不会产生新数组,而是将产生的值直接替换原数组的值。
3:reduce(func(prevval,curval)),这个方法比较奇怪,它相当于一个叠加器,将数组的第一个元素传递给函数以后,再将之前函数的返回值与后续的元素依次传递给函数,最后得到的函数返回值为输出值,难道是离散卷积,我得去查查数学书,不知道有什么用处。
4:filter(func(index,val)),这个方法实现一个过滤器,将数组的序号和值传递给函数,如果函数返回true,就将这个值加入到新数组,否则就过滤掉,最后产生的新数组作为输出。
今天大致研究了这些东西,不知道这些新特性对自己的工作是否有用了
|