3

これはここで数回出てきましたGoが、私の経験はユニークだと思います. これが私のコードです。

type Stack []Weight

func newStack( size int, startSpread Spread ) Stack {
  stack := make(Stack, size)

  for _, curWeight := range stack {
    curWeight = Weight{ startSpread, rand.Float64( ), rand.Float64( ) }
  }

  return stack
}

gcを使用していないと表示されるのはなぜcurWeightですか?

4

2 に答える 2

5

for _, curWeight := range stack範囲構成 ( ) は要素を次々にコピーすることに注意してください。したがって、値をコピーするだけで、それ以降の計算、出力、または戻りにはコピーを使用しません。コピーをもう一度ドロップするだけです。

したがって、最初のアイデアは、重みをスタックに追加して返すことだったと思います。やってみましょう:

func newStack(size int, startSpread Spread) Stack {
    stack := make(Stack, size)

    for i := 0; i < size; i++ {
        stack[i] = Weight{startSpread, rand.Float64(), rand.Float64()}
    }

    return stack
}
于 2011-06-09T05:54:22.340 に答える
1

2回割り当てていますが、どちらの場所でも値を使用しcurWeightていません。

Go は、変数に値を代入する場合、プログラムの潜在的なポイントでその値を読み戻さなければならないと主張しています。読まない場合は、_代わりに割り当ててください。

于 2011-06-09T05:52:15.490 に答える