是否可以使用for循环在golang中迭代返回的函数?
假设我们有:是否可以使用for循环在golang中迭代返回的函数?,go,Go,假设我们有: func foo() func() int { return func() { for i := range [0..10] { return i } } } func main() { for i := foo() { } } 我可以在for循环中迭代返回的函数而不知道它将循环多少次吗?不能单独迭代函数。函数只返回一次,因此for循环永远不会循环。如果希望在i上返回闭包,可以在每次调用时
func foo() func() int {
return func() {
for i := range [0..10] {
return i
}
}
}
func main() {
for i := foo() {
}
}
我可以在for循环中迭代返回的函数而不知道它将循环多少次吗?不能单独迭代函数。函数只返回一次,因此for循环永远不会循环。如果希望在
i
上返回闭包,可以在每次调用时递增闭包,但仍然需要知道何时停止,这可以通过从内部函数返回多个值来实现
Go还使用通道进行通信,您可以通过这些通道进行range
over
func foo() chan string {
ch := make(chan string)
go func() {
for i := 0; i < 10; i++ {
ch <- strconv.Itoa(i)
}
close(ch)
}()
return ch
}
func main() {
for i := range foo() {
fmt.Println(i)
}
}
func foo()chan字符串{
ch:=制造(成串)
go func(){
对于i:=0;i<10;i++{
ch不能单独迭代函数。函数只返回一次,因此for循环永远不会循环。如果要在i
上返回闭包,可以在每次调用时递增闭包,但仍然需要知道何时停止,这可以通过从内部函数返回多个值来实现
Go还使用通道进行通信,您可以通过这些通道进行range
over
func foo() chan string {
ch := make(chan string)
go func() {
for i := 0; i < 10; i++ {
ch <- strconv.Itoa(i)
}
close(ch)
}()
return ch
}
func main() {
for i := range foo() {
fmt.Println(i)
}
}
func foo()chan字符串{
ch:=制造(成串)
go func(){
对于i:=0;i<10;i++{
例如,ch
package main
import "fmt"
func foo(n int) func() (int, bool) {
i := -1
return func() (int, bool) {
if i >= n {
return 0, true
}
i++
return i, false
}
}
func main() {
f := foo(5)
for i, eof := f(); !eof; i, eof = f() {
fmt.Println(i)
}
}
输出:
0
1
2
3
4
5
比如说,
package main
import "fmt"
func foo(n int) func() (int, bool) {
i := -1
return func() (int, bool) {
if i >= n {
return 0, true
}
i++
return i, false
}
}
func main() {
f := foo(5)
for i, eof := f(); !eof; i, eof = f() {
fmt.Println(i)
}
}
输出:
0
1
2
3
4
5
首先,您试图返回一个函数,该函数在for循环中返回一个数字(应该只返回一次),但它没有返回类型。最重要的是,主函数返回类型是字符串。因此存在许多不一致。如果您使问题的非相关部分有效,而不是编造语法并要求我们对其进行解密,这将非常有帮助。首先,您尝试返回一个返回数字的函数在for循环中(应该只返回一次),但它没有返回类型。最重要的是,主函数返回类型是字符串。因此存在很多不一致之处。如果您使问题的非相关部分有效,而不是编造语法并要求我们解译它,这将非常有帮助。我一直缺少“第二次”调用f()
define在定义的第三部分。感谢@peterSOI错过了对f()
定义的定义的第三部分的“第二次”调用。感谢@peterSO