首先高階函式也是函式,相對於普通函式還是有點區別的,區別點在於:這個函式的形參列表或返回引數列表中存在資料型別為函式型別,這就是高階函式。
你會發現,我上面講過的閉包(我的搜尋欄目搜尋funcclosure
即可),和這個高階函式有很多相似之處,沒錯,閉包就是高階函式,他只是其中的一種,因為閉包是函式返回,還有一種就是形參是函式的。
我們來實現乙個閉包加上形參的高階函式
package high_func
import "fmt"
func highfunc(val int, f func(i1 int) int) (func() int)
return val + bivar
}}
測試檔案
package high_func
import (
"fmt"
"testing"
)func testhighfunc(t *testing.t) )
for i := 0; i <= 9; i++
}
結果輸出
此時閉包的值為 0
可以加一
1可以加一
2可以加一
3可以加一44
4444
4
那麼,作為形參的閉包有啥用的?我們一般用它作為其他形參的限制條件,這一點你也可以不用這樣寫。這樣寫的好處就是可以在你寫**的地方簡介明了的看出來他是幹啥的,並且**寫著方便。
這種**,我認為,對於學習js的人來說,是還可以的,畢竟js的箭頭函式和這玩意很相似,對於js來說,有封裝好的迭代函式,some, every, reduce, filter, 還有乙個,忘了,尷尬。。。
以後,我會根據js的迭代函式,來實現幾個切片的過濾,會增加到util裡面
下面來看一下別人寫實際用處的過濾輸出例子
package main
import "fmt"
type student struct
func filter(stu student, f func(s student) bool) student
}return r
}func main()
s2 := student
s3 := student
s := student
fmt.println("all student: ", s)
var result student
result = filter(s, func(s student) bool
return false
})fmt.println("less than 90: ", result)
}
python 函式高階 python 函式高階
形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...
Python高階 函式高階
閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...
Scala高階 匿名函式和高階函式
scala版本 2.10.5 一 函式是第一等公民 1 把函式作為實參傳遞給另外乙個函式。2 把函式作為返回值。3 把函式賦值給變數。4 把函式儲存在資料結構裡。在scala中,函式就像普通變數一樣,同樣也具有函式的型別。二 函式型別 1 定義 在scala語言中,函式型別的格式為a b,表示乙個接...