语法 - for 循环中的 init 语句是否允许赋值?

问题描述 投票:0回答:1

在下面的代码中:

package main

func main() {

    array := [4]int{1, 2, 3, 4}
    length := len(array)
    for i:=0,j:=length-1; i < length/2; i++, j--{
        array[i], array[j] = array[j], array[i] 
    }
    fmt.Println(array)
}

for循环中的init语句,

i:=0,j:=length-1
给出错误:
expected boolean or range expression, found assignment

for 循环中的 init 语句允许逗号分隔赋值吗?

go
1个回答
0
投票

for
语句的init语句是一个简单的语句:

ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .
InitStmt = SimpleStmt .
PostStmt = SimpleStmt .

其中简单陈述是:

SimpleStmt = EmptyStmt | ExpressionStmt | SendStmt | IncDecStmt | Assignment | ShortVarDecl .

您对分配感兴趣,即:

Assignment = ExpressionList assign_op ExpressionList .

assign_op = [ add_op | mul_op ] "=" .

总而言之,一个赋值可能是一个元组赋值,所以你可以像这样做你想做的事:

for i, j := 0, length-1; i < length/2; i, j = i+1, j+1 {
    array[i], array[j] = array[j], array[i]
}
© www.soinside.com 2019 - 2024. All rights reserved.