作者yauhh (喲)
看板PLT
標題Re: [比較] 我為何鍾情於用 Scala 做為兵刃(三)
時間Sat Jan 22 00:46:05 2011
※ 引述《brianhsu (墳墓)》之銘言:
: 也因為如此,Scala 的做法是讓我比較習慣的:map、filter、length 這些
: 東西,是 List 物件的方法。
: 換句話說,上面的程式,在 Scala 中會長得像下面這樣:
: ====================== 我是 Scala 程式分隔線 =========================
: val xs = List(-1, -2, -3, 0, 1, 2, 3)
: val square = (n: Int) => n * n
: val isGreaterThan5 = (n: Int) => n > 5
: val result = xs.map(square).filter(isGreaterThan5).length
: // 上面那行和下面這行等價
: // val result = xs.map(n => n * n).filter(n => n > 5).length
: println (result1)
: ======================================================================
我覺得 val result = xs.map(square).filter(isGreaterThan5).length
一句卻把物件導向演繹到極致了. 它意思是 xs 是物件,
xs.map(square) 變成另一個物件,而且也是 List, 所以
(xs.map(square)).filter(isGreaterThan5) 又變成另一個 List 物件.
"任何函數都是物件",的確如此,連函數處理結果也是物件.
跟一般 functional 所講的有一點差別的是: 這一串程式的點點串接也是個
高階函數,就像 (f . g . h) 的這種點點一樣. 只是在 Java 場合要表達成
以標的物為首,之後再接上要傳遞給標的物的各種訊息,包括 method 與函數參數.
Java機制或 Scala 語言的最底層把點點處理掉了. 不曉得點點這部份可以怎麼寫呢?
前面所說 post-functional 說得也很好,恰好是在 Java-Scala 場合就要用
很混搭的,很 meta 的方式理解語言的二個構面.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.64.101
1F:推 godfat:囉嗦些: f compose g compose h apply 5 // left-assoc 01/25 04:21