Мне Санёк этот код прислал, мол типо, посмотри что я сделал. Ну я с ходу брякнул что такой код работать не будет. Он говорит - Как так то? У меня, типо, всё арбайтен. И тут я малость подзавис
Если не делать i := i, тогда в замыкание попадет только цифра 3. Тут либо в замыкание надо ее как параметром передавать, либо вот так. Лично я предпочитаю параметры.
А справочник читали про эту фишку? А ещё лучше указывать среду разработки, где компилируется код, так как не везде одинаков язык программирования, как на первый взгляд кажется. Например, PascalABC хоть и быть создан на базе TurboPascal-е, но они являются разными языками программирования, и, поэтому нужно обязательно указывать диалект, на котором пишется программа.
В стеке, всегда делается копия переменной. Поскольку в цикле ты используешь не указатель, то для счетчика в стеке будет создана новая временная переменая, с областью видимости на этот счетчик. А старая останется как есть. Они не пересекаются
Вот я долго писал на паскале. Но этого трюка - не знал. Просто в голову не приходило использовать одну переменную. Но после твоего поста, мне стало интересно - почему так. И я нашел ответ. Правда в другом языке, но сути это не меняет. Теперь я знаю ответ. Я даже привел пример программы на языке golang. Это ни какое не чудо на самом деле, а все очень даже логично. Ответ на этот вопрос лежит в гугле.
Мы используем cookie-файлы, чтобы улучшить сервисы для вас. Если ваш возраст менее 13 лет, настроить cookie-файлы должен ваш законный представитель. Больше информации
Комментарии 24
ints := []int{1, 2, 3}
for _, i := range ints {
i := i
go func() {
fmt.Printf("%v\n", i)
}()
}
Тут либо в замыкание надо ее как параметром передавать, либо вот так. Лично я предпочитаю параметры.
for _, i := range ints {
go func(i int) {
fmt.Printf("%v\n", i)
}
}
S:=1
Write( s )
S:=2
Write ( s )
...
S:=5
Write( s )
И после происходит её выполнение с последующим присвоением значений
Но после твоего поста, мне стало интересно - почему так. И я нашел ответ. Правда в другом языке, но сути это не меняет. Теперь я знаю ответ. Я даже привел пример программы на языке golang.
Это ни какое не чудо на самом деле, а все очень даже логично.
Ответ на этот вопрос лежит в гугле.