переменная объявлена ​​и не используется в цикле for - PullRequest
3 голосов
/ 09 июня 2011

Этот пару раз подходил сюда для 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?

Ответы [ 2 ]

5 голосов
/ 09 июня 2011

Обратите внимание, что конструкция диапазона (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
}
0 голосов
/ 09 июня 2011

Вы присваиваете curWeight дважды, но вы не используете значение в любом месте.

Go настаивает на том, что если вы присваиваете значение переменной, то вы должны прочитать это значение в некоторой потенциальной точке вашей программы. Если вы не собираетесь его читать, присвойте _.

...