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