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,就將這個值加入到新數組,否則就過濾掉,最後產生的新數組作為輸出。
今天大致研究了這些東西,不知道這些新特性對自己的工作是否有用了。