关于Squirrel3的Lambda表达式

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,就将这个值加入到新数组,否则就过滤掉,最后产生的新数组作为输出。

今天大致研究了这些东西,不知道这些新特性对自己的工作是否有用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值