應該廣泛使用case語句簡化函式字面量的實現

2021-08-19 15:57:37 字數 836 閱讀 1561

這篇文章很短,但足以單獨作為一篇文章存在,因為這裡介紹的這個scala程式設計技巧非常的實用和高效。

在scala裡我們需要大量地編寫一些函式字面量作為引數傳遞給高階函式,而很多時候,被要求提供的函式字面量的引數是一些復合型別,比如tuple,在函式字面量的實現體中,往往第一步就是通過模式匹配從復合型別中提取出巢狀的變數進行計算,例如下面計算元組兩元素平方差的例子:

scala>   val xs = seq((1,2),(3,4))

xs: seq[(int, int)] = list((1,2), (3,4))

scala> val xs1 = xs.map

xs1: seq[int] = list(3, 7)

在這個例子中我們使用的是常規的函式字面量的實現方式,但是更加「老道」的寫法是使用case語句! 我們之前在介紹偏函式時提過使用case語句實現函式字面量: 但是在偏函式之外的場景,我們似乎沒有找到特別的理由去使用case語來實現乙個函式字面量。

而實際上我們應該廣泛地使用case語句去定義函式字面量,因為它確實有很多「額外」的好處,因為使用case定義函式字面量可以將引數列表宣告與巢狀變數的提取合二為一,簡化函式的實現!,上面的例子如果使用case語句實現將會是這樣的:

scala>   val xs2 = xs.map 

xs2: seq[int] = list(3, 7)

scala> println(xs2)

list(3, 7)

我們可以清楚地看到,case實現的版本少了一行,它把引數列表宣告和巢狀變數的提取合併成了一步,變得更加簡潔和優雅。

case語句使用舉例

shell中的case語句 可以把變數的內容與多個模板進行匹配,再根據成功匹配的模板去決定應該執行哪部分 使用格式 case 匹配母板 in 模板1 模板2 語句組 模板3 模板4 語句組 esac case語句的匹配是從上往下地匹配順序。因此,case語句編寫的原則是從上往下,模板從特殊到普通。在...

erlang 中case語句的使用

在erlang中,至少有三種可互換的流程控制方式 函式宣告上的pattern match,case語句,if語句 這裡講將case語句和函式宣告上的pattern match的區別。case語句的格式如下 case conditional expression of pattern1 express...

使用控制結構 條件分支語句 CASE語句

當處理多重條件分支時,不僅可以使用if語句,而且可以使用case語句。因為使用case語句更加簡潔,而且執行效率也更好,所以建議使用case 語句。注意 為了避免case not found 例外,在編寫case語句時應該帶有else 子句。declare v deptno emp.deptno t...