scala学习手记26 - 重用函数值
生活随笔
收集整理的這篇文章主要介紹了
scala学习手记26 - 重用函数值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
函數值對消除代碼重復有很大的幫助。但是像函數值這樣直接將一個函數作為另一個函數的參數卻不太利于函數值本身的重用。
來看一個例子:
class Equipment(val routine: Int => Int) {def simulate(input: Int) = {print("Running simulation...")routine(input)} }在這個例子里將函數值作為參數傳到了構造器中。
看一下如何使用:
val equipment1 = new Equipment({input=>println("calc with " + input); input}) val equipment2 = new Equipment(input=>{println("calc with " + input); input})equipment1.simulate(4) equipment1.simulate(6)執行結果如下:
上面的代碼中還是出現了重復代碼。新建實例equipment1和equipment2時,向Equipment構造函數中傳遞的函數值是一樣的。要避免這樣的函數值重復,可以將函數值賦給一個val,然后調用的時候直接使用val。就像下面這樣:
val calculate = { input: Int => println("calc with " + input); input }val equipment1 = new Equipment(calculate) val equipment2 = new Equipment(calculate)equipment1.simulate(4) equipment1.simulate(6)這里將函數值保存在一個val引用calculate中。請注意下,在這里需要聲明函數值參數的類型。在之前是不需要的。那是因為scala可以推斷出直接嵌入到函數中的函數值的參數類型。
實際上scala還支持一種更地道的方式:在需要函數值的地方可以傳入普通函數。所以如下的代碼也是可以的:
def calculate(input: Int) = {println("calc with " + input)input }val equipment1 = new Equipment(calculate) val equipment2 = new Equipment(calculate)這樣看起來更自然些,是不是。
就這樣。
##########
轉載于:https://www.cnblogs.com/amunote/p/5712910.html
總結
以上是生活随笔為你收集整理的scala学习手记26 - 重用函数值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华氏度和摄氏度的换算
- 下一篇: 关于爱情好听的签名句子简短185个