假設我有斐波那契數的生成器,我想使用enumerate(get_next_fibs(10))并且我想擁有對的生成器index, number_from_generator,我正在努力尋找具有“命名回傳值”的解決方案
這不是應該如何完成,而是為了學習有關生成器的特定內容
package main
import "fmt"
func get_next_fibs(ii int) func() int {
i := 0
a, b := 0, 1
fc := func() int {
i
a, b = b, a b
if ii <= i {
return -1
}
return a
}
return fc
}
func enumerate(iter func() int) func() (index, v int) {
index := 0
fc := func() (index, v int) {
v := iter()
return
index
}
return fc
}
func main() {
iter := enumerate(get_next_fibs(10))
// iter := get_next_fibs(10)
fmt.Printf("iter = %T\n", iter)
for tuple := iter(); tuple != -1; tuple = iter() {
fmt.Println("tuple:", tuple)
}
}
uj5u.com熱心網友回復:
您在此代碼示例中幾乎沒有問題:
- 你不能有
indexafter return 陳述句。如果您需要在-ing之后做某事,請使用deferreturn。 - 你錯過了變數陰影在 go 中是如何作業的。因此,您試圖修改錯誤的
index變數。 - Go 沒有元組。
...
func enumerate(iter func() int) func() (index, v int) {
counter := 0
return func() (index, v int) {
i := counter
counter
return i, iter()
}
}
...
func main() {
iter := enumerate(get_next_fibs(10))
fmt.Printf("iter = %T\n", iter)
for i, v := iter(); v != -1; i, v = iter() {
fmt.Printf("i: %d, v: %d\n", i, v)
}
}
游樂場鏈接
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/369721.html
