当前位置: 首页 > 面试题库 >

在for循环初始化器中构造

汪信鸥
2023-03-14
问题内容

知道为什么for循环初始化程序中的此struct表达式在编译时会导致语法错误吗?在这种情况下,指向struct的指针工作正常,但是我需要像波纹管这样的局部变量。感谢您的建议!

type Request struct {
    id   int
    line []byte
    err  error
}

go func() {
    for r := Request{}; r.err == nil; r.id++ {
        r.line, r.err = input.ReadSlice(0x0a)
        channel <- r
    }
}()

问题答案:

简化您的代码:

for r := Request{}; r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}

给出编译时错误:

预期的布尔值或范围表达式,找到简单的语句(缺少复合文字周围的括号?)(以及另外1个错误)

该构造难以解析。'{'不管是复合文字的一部分还是for语句本身(for
块)的开头括号,开头括号都不是显而易见的。

您可以通过在组合文字周围使用括号来使其变得明显(如错误所示):

for r := (Request{}); r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}


 类似资料:
  • 这里有两个相同的代码,唯一的区别是我在第一个代码中使用的是在for循环内初始化的字符串,另一方面我使用的是在for循环外初始化的字符串,但得到的答案仍然不同 在for循环内初始化的字符串: 输出为以下形状: 在for循环外部初始化的字符串: 输出为以下形状: 我真的很困惑正在发生的事情,提前谢谢你。

  • 在第一次使用gradlew进行项目构建的时候,会对构建环境进行初始化,会把Gradle的安装包、插件和相关依赖下载下来. 在Terminal中输入命令,如下: $ ./gradlew clean Downloading https://services.gradle.org/distributions/gradle-2.10-all.zip ……………………………………………………………………

  • 和C语言不同的的是 和if一样,条件表达式的值必须是布尔类型 和if一样,不需要编写圆括号 和if一样,左大括号必须和表达式在同一行 格式: for 初始化表达式;循环条件表达式;循环后的操作表达式 { 循环体语句; } package main import "fmt" func main() { for i:=0; i<10; i++{ fmt.Println(i

  • 问题内容: 我正在用Java编写一个函数,该函数计算字符串中空格后的字符数。对于某些人来说,这个问题听起来微不足道。 现在,我想在for循环中重用此变量(位置),而无需在初始化语句中创建新的变量(i)。目前,我正在这样做。 问题答案: 您无需声明新变量: 您可以将for循环的任何字段保留为空白。 还是更好,为什么不呢?

  • 问题内容: 我使用java for循环进行了一些运行时测试,并发现了一种奇怪的行为。对于我的代码,我需要原始类型(例如int,double等)的包装对象来模拟io和输出参数,但这不是重点。只是看我的代码。具有字段访问权限的对象如何比原始类型更快? 优先类型的循环: 结果: MicroTime原语(最大值:= 10000.0):110 MicroTime原语(最大值:= 100000.0):1081

  • 问题内容: 在下面的示例代码中,是否真的需要counter = 0,还是有更好,更多的Python方法来访问循环计数器?我看到了一些与循环计数器有关的PEP,但它们要么被延迟要么被拒绝(PEP 212 和PEP 281)。 这是我的问题的简化示例。在我的实际应用程序中,这是通过图形完成的,整个菜单必须每帧重新绘制一次。但这以易于复制的简单文本方式进行了演示。 也许我还应该补充一点,我正在使用Pyt