我更傾向于像理解對(duì)象那樣來(lái)理解 scala 的函數(shù),因?yàn)?Scala 函數(shù)里面有一個(gè)叫做“函數(shù)文本” 的概念(這個(gè)概念在 ActionScript 中也有,在 AS 中,函數(shù)文本是指 未命名的函數(shù))。在 Scala 中,函數(shù)文本被編譯成一個(gè)類(lèi),類(lèi)在運(yùn)行期實(shí)例化的時(shí)候是一個(gè)函數(shù)值(function value)。所以,在源代碼里面的那個(gè)叫“函數(shù)文本”,運(yùn)行期對(duì)象里面的那個(gè)叫 函數(shù)值。很像“類(lèi)”……
Scala 語(yǔ)言中的占位符 “_”, 太可愛(ài)了,太可愛(ài)了。對(duì)于那些簡(jiǎn)單的一看函數(shù)名就知道用來(lái)干嘛的計(jì)算就不用傷神去想起個(gè)什么變量名字了。但是這種特性不能廣泛的應(yīng)用,因?yàn)檫@個(gè) cute 的 _ 用過(guò)了將會(huì)帶來(lái)很大的代碼維護(hù)量——本來(lái)是因?yàn)椴幌雽?xiě)太多的字而采用的替代符,可能過(guò) 1 個(gè)小時(shí)我就不記得了,需要寫(xiě)更多的注釋來(lái)標(biāo)記。但是不管怎么說(shuō),這種替代符在 Java 中是沒(méi)有的,看習(xí)慣 Java 的我們可能會(huì)開(kāi)始有些不適應(yīng)看別人寫(xiě)的 “_”. Scala 中的尾遞歸。從項(xiàng)目本身的要求來(lái)說(shuō),是很講究效率的。遞歸,寫(xiě)起來(lái)容易,簡(jiǎn)潔,明了,但是會(huì)帶來(lái)很大的額外開(kāi)銷(xiāo)。在 C++ 和 Java 中,同樣的問(wèn)題,循環(huán)的效率一般會(huì)高一些。但是 Scala 的編譯器對(duì)尾遞歸做了優(yōu)化(我們期待 Scala 為遞歸做更多的優(yōu)化吧~),對(duì)于尾遞歸,它的效率幾乎和 循環(huán) 相同。但是,尾遞歸的限制比較多(也就是說(shuō),只有在最后調(diào)用自己的函數(shù)才是尾遞歸),這樣,能達(dá)到相同效率的應(yīng)用就有限了,而且運(yùn)用的時(shí)候還要考慮是否是“尾遞歸”的問(wèn)題。:( |
|
來(lái)自: 看風(fēng)景D人 > 《scala》