《快學Scala》第12章 高階函式 學習筆記

2021-08-14 20:52:53 字數 1506 閱讀 6979

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 變數名 輸入引數型別和個數 函式實現和返回值...