Комментарии
- 21 ноя 2019 14:22Если не делать i := i, тогда в замыкание попадет только цифра 3.
Тут либо в замыкание надо ее как параметром передавать, либо вот так. Лично я предпочитаю параметры. - 21 ноя 2019 14:23ints := []int{1, 2, 3}
for _, i := range ints {
go func(i int) {
fmt.Printf("%v\n", i)
}
} - 21 ноя 2019 14:25объясняестся это как раз областью видимости. С точки зрения компилятора это две области. Так то. Хотя если честно - очень, странно
- Комментарий удалён.
- 22 ноя 2019 09:45Если мы вводим для переменной s значение 5, то вместо цикла видимо сначала создаётся инструкция типа:
S:=1
Write( s )
S:=2
Write ( s )
...
S:=5
Write( s )
И после происходит её выполнение с последующим присвоением значений - 24 ноя 2019 17:00А справочник читали про эту фишку? А ещё лучше указывать среду разработки, где компилируется код, так как не везде одинаков язык программирования, как на первый взгляд кажется. Например, PascalABC хоть и быть создан на базе TurboPascal-е, но они являются разными языками программирования, и, поэтому нужно обязательно указывать диалект, на котором пишется программа.
- 26 ноя 2019 10:56Я и без вас знаю что он пересчитывает все числа от одного до числа введенного с клавиатуры.
- 26 ноя 2019 10:56Я хотел обсудить почему он работает с одной переменной.
- 26 ноя 2019 11:24Пробывал онлайн паскаль и дельфи. И там и там всё робит, как ни странно
- 26 ноя 2019 12:43В стеке, всегда делается копия переменной. Поскольку в цикле ты используешь не указатель, то для счетчика в стеке будет создана новая временная переменая, с областью видимости на этот счетчик. А старая останется как есть. Они не пересекаются
- 26 ноя 2019 12:44Да работает. И если почитать подробности работы компилятора, то все становится на свои места.
- 26 ноя 2019 12:50Вот я долго писал на паскале. Но этого трюка - не знал. Просто в голову не приходило использовать одну переменную.
Но после твоего поста, мне стало интересно - почему так. И я нашел ответ. Правда в другом языке, но сути это не меняет. Теперь я знаю ответ. Я даже привел пример программы на языке golang.
Это ни какое не чудо на самом деле, а все очень даже логично.
Ответ на этот вопрос лежит в гугле. - 26 ноя 2019 12:54Это будет работать не только в паскале. Думаю как минимум во всех компилируемых языках.
Для того чтобы оставить комментарий, войдите или зарегистрируйтесь
Группа для программистов ( programming )
:Александр Такмаков
Как работает вот этот код?