Как работает вот этот код?

Как работает вот этот код? - 888264118247
Как работает вот этот код? - 888264118503

Комментарии

  • 21 ноя 2019 14:22
    Если не делать i := i, тогда в замыкание попадет только цифра 3. 
    Тут либо в замыкание надо ее как параметром передавать, либо вот так. Лично я предпочитаю параметры.
  • 21 ноя 2019 14:23
    ints := []int{1, 2, 3}
    for _, i := range ints {
      go func(i int) {
        fmt.Printf("%v\n", i)
      }(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
    Это будет работать не только в паскале. Думаю как минимум во всех компилируемых языках.
  • 1 дек 2019 13:27
    Насчет гугла согласен
  • 12 авг 2020 14:22
    Бля ну че с тобой?