關於Squirrel3的Lambda運算式

來源:互聯網
上載者:User

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,就將這個值加入到新數組,否則就過濾掉,最後產生的新數組作為輸出。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.