假设我有斐波那契数的生成器,我想使用enumerate(get_next_fibs(10))并且我想有对生成器index, number_from_generator,我正在努力寻找“命名返回值”的解决方案这不是应该如何完成,而是为了学习有关生成器的特定内容package mainimport "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) }}
1 回答
www说
TA贡献1775条经验 获得超8个赞
您在此代码示例中有几个问题:
你不能有
index++after 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)
}
}
- 1 回答
- 0 关注
- 206 浏览
添加回答
举报
0/150
提交
取消
