scala混合了物件導向和函式式的特性。在函式式程式語言中,函式時「頭等公民」,可以像任何其他型別一樣被傳遞和操作;只需要將明細動作包含在函式當中作為引數傳入即可。
本章要點概述:
在scala中,可以在變數中存放函式:
import scala.math._
val num = 3.14
valfun = ceil _ //將fun設為ceil函式
fun(num) //呼叫fun中的函式,返回值為4.0
array(3.14, 1.42, 2.0).map(fun)
上面的**中,將fun設為ceil函式。ceil函式後的意味著確實指的是這個函式,而不是碰巧忘記了給它傳送引數。如果不帶會出錯。
scala> import scala.math._
import scala.math._
scala> val num = 3.14
num: double = 3.14
scala> val fun = ceil _
fun: double => double = scala> val fun = ceil
:10: error: missing arguments for
method
ceil
inclass
mathcommon;
follow this method
with `_' if
youwant
totreat
itas
apartially
function
valfun = ceil
scala> fun
(num)
res0: double = 4.0
scala> array(3.14, 1.42, 2.0).map(fun)
res1: array[double] = array(4.0, 2.0, 2.0)
說明:從技術上講, _將ceil方法轉成了函式。在scala中,無法直接操縱方法,而只能直接操縱函式。
函式的用處:
在scala中,不需要給每乙個函式命名,正如不需要給每個數字命名一樣。以下是乙個命名函式:
(x: double) =>
3 * x //該函式將傳給它的引數乘以3
val triple = (x: double) =>
3 * x //將函式存放在變數中
def triple(x: double) = 3 * x //跟def一樣
array(3.14, 1.42, 2.0).map
((x:double) => 3 * x)
//不需要給函式命名,可以直接將其傳遞給另乙個函式,結果為array
(9.42, 4.26, 6.0)
(3.14, 1.42, 2.0)
map((x:double) => 3 * x)
《快學scala》12章練習答案
最近看了看 快學scala 比較好的點在於這本書每一章後面都有一些練習,可以自己去做一下,對於掌握知識來講還是不錯的 像是以前上學後面的習題一樣 我不知道 有答案,也沒有認真找過,就自己做了做。iteye上有乙個人寫了前幾章的答案,可以參考一下,鏈結為 遺憾的是這個人只寫到第九章,我上面的鏈結也是第...
快學Scala12章參考練習
1 編寫函式values fun int int,low int,high int 該函式輸出乙個集合,對應給定區間內給定函式的輸入和輸出。比如,values x x x,5,5 應該產出乙個對偶的集合 5,25 4,16 3,9 5,25 分析 輸入是乙個f int int的函式及2個int表示上...
Scala12 Scala高階函式
scala混合了物件導向和函式式的特性,我們通常將可以作為引數傳遞到方法中的表示式叫做函式。在函式式程式語言中,函式是 頭等公民 高階函式包含 作為值的函式 匿名函式 閉包 柯里化等等。可以像任何其他資料型別一樣被傳遞和操作的函式。定義函式時格式 val 變數名 輸入引數型別和個數 函式實現和返回值...