兄弟連go教程(14)函式 - 匿名函式
匿名函式可賦值給變數,做為結構欄位,或者在 channel ⾥裡傳送。
閉包複製的是原物件指標,這就很容易解釋延遲引⽤用現象。
輸出:
在彙編層⾯面,test 實際返回的是 FuncVal 物件,其中包含了匿名函式地址、閉包物件指
針。當調⽤用匿名函式時,只需以某個暫存器傳遞該物件即可。
// --- function variable ---
fn := func() { println("Hello, World!") }
fn()
// --- function collection ---
fns := [](func(x int) int){
func(x int) int { return x + 1 },
func(x int) int { return x + 2 },
}
println(fns[0](100))
// --- function as field ---
d := struct {
fn func() string
}{
fn: func() string { return "Hello, World!" },
}
println(d.fn())
// --- channel of function ---
fc := make(chan func() string, 2)
fc <- func() string { return "Hello, World!" }
println((<-fc)())
閉包複製的是原物件指標,這就很容易解釋延遲引⽤用現象。
func test() func() {
x := 100
fmt.Printf("x (%p) = %d\n", &x, x)
return func() {
fmt.Printf("x (%p) = %d\n", &x, x)
}
}
func main() {
f := test()
f()
}
輸出:
x (0x2101ef018) = 100
x (0x2101ef018) = 100
在彙編層⾯面,test 實際返回的是 FuncVal 物件,其中包含了匿名函式地址、閉包物件指
針。當調⽤用匿名函式時,只需以某個暫存器傳遞該物件即可。
FuncVal { func_address, closure_var_pointer ... }
相關文章
- 兄弟連go教程(11)函式 - 函式定義Go函式
- 兄弟連go教程(12)函式 - 變參Go函式
- 兄弟連go教程(13)函式 返回值Go函式
- 兄弟連go教程(15)函式 - 延遲呼叫Go函式
- 兄弟連go教程(15)函式 - 錯誤處理Go函式
- Go 匿名函式Go函式
- GO 的匿名函式使用注意Go函式
- 深入理解 函式、匿名函式、自執行匿名函式函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- 兄弟連go教程(10)表示式 - 控制流Go
- PHP匿名函式PHP函式
- Ruby 匿名函式函式
- Golang匿名函式Golang函式
- JavaScript 匿名函式JavaScript函式
- JavaScript匿名函式JavaScript函式
- 閉包函式(匿名函式)的理解函式
- Day 14 匿名函式 內建函式 物件導向程式設計函式物件程式設計
- 兄弟連go教程(19)資料 - 匿名欄位Go
- Python函式與lambda 表示式(匿名函式)Python函式
- 兄弟連go教程(9)表示式-初始化Go
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- PHP 匿名函式初探PHP函式
- 匿名函式(Python)函式Python
- Python匿名函式Python函式
- 兄弟連go教程(8)表示式--保留字;運算子Go
- Python技法3:匿名函式、回撥函式和高階函式Python函式
- 【Go語言學習】匿名函式與閉包Go函式
- Python 返回函式+匿名函式Python函式
- 初識Lambda表示式(匿名函式)函式
- 從settTimeout到匿名函式、箭頭函式之() => {}函式
- PHP 核心特性 - 匿名函式PHP函式
- 裝飾器,匿名函式函式
- 1.5.7 Python匿名函式Python函式
- js中的匿名函式JS函式
- Js匿名函式小指南JS函式
- JavaScript 匿名函式 閉包JavaScript函式
- python函式程式設計 返回函式 匿名函式 裝飾器 偏函式Python函式程式設計
- 好程式設計師Python教程系列遞迴函式與匿名函式呼叫程式設計師Python遞迴函式