Squirrel 剛發(fā)布了Squirrel3 beta2版本,一直沒有時間研究它,這個周末,終于決定仔細看看。在Squirrel3 alpha的時候,就大致知道要加入Lambda表達式,不過Squirrel本來就將函數(shù)當成一個內(nèi)部變量,Lambda表達式似乎意義不是很大。
Squirrel3的Lambda表達式大概是這樣應(yīng)用的:
exp := '@' '(' paramlist ')' exp
例如:local myexp = @(a,b) a + b
這等同于 local myexp = function(a,b) { return a + b; }
因此,這個Lambda表達式的意義也就是寫法上稍微的簡潔,只是不知道Alberto Demichelis在實現(xiàn)的時候是否對Lambda表達式做過優(yōu)化。
在Squirrel3中,對Lambda的最大支持是在Array上提供了好幾種內(nèi)部方法,根據(jù)Alberto Demichelis的文檔,增加了以下四種內(nèi)部方法:
1:map(func(a)),對Array的每個元素執(zhí)行func(a)函數(shù)(或者Lambda表達式),將產(chǎn)生的值放入一個新的數(shù)組,并返回這個數(shù)組。這個內(nèi)部方法有點意思,如果從數(shù)學(xué)角度看,這相當于一個映射變換,也許不是什么革命性的東西,但可以減少代碼的編寫量。
2:apply(func(a)),這個內(nèi)部方法的功能與map相似,只是不會產(chǎn)生新數(shù)組,而是將產(chǎn)生的值直接替換原數(shù)組的值。
3:reduce(func(prevval,curval)),這個方法比較奇怪,它相當于一個疊加器,將數(shù)組的第一個元素傳遞給函數(shù)以后,再將之前函數(shù)的返回值與后續(xù)的元素依次傳遞給函數(shù),最后得到的函數(shù)返回值為輸出值,難道是離散卷積,我得去查查數(shù)學(xué)書,不知道有什么用處。
4:filter(func(index,val)),這個方法實現(xiàn)一個過濾器,將數(shù)組的序號和值傳遞給函數(shù),如果函數(shù)返回true,就將這個值加入到新數(shù)組,否則就過濾掉,最后產(chǎn)生的新數(shù)組作為輸出。
今天大致研究了這些東西,不知道這些新特性對自己的工作是否有用了
|