1. Lua / Говнокод #19860

    +18

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    a = {}
    table.insert(a,a)
    a[1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][21312] = 5
    a[1][1][1][1][1][1][1][1][1][1] = 1
    print(a[1], a[21312]) -- Вывод: 1, 5

    Запостил: Sfabrikan, 22 Апреля 2016

    Комментарии (24) RSS

    • Вау, ссылка на таблицу в самой таблице!
      Ответить
    • хм. попробовал в перл перевести и сразу обломался:
      $a = [];
      $a->[0] = $a;
      $a->[0][0][0][0][0][0][0] = 1; # аналогично `$a->[0] = 1;`, и убивает рекурсию.

      задаюсь теперь вопросом как именно это в луа работает.

      PS или оно работает только потому что `a[1] = 1` стоит в конце?
      Ответить
      • > и убивает рекурсию.
        > или оно работает только потому что `a[1] = 1` стоит в конце?
        Да.
        Если я правильно понимаю, ваши примеры эквивалентны. В 4 строке автор как раз убивает рекурсию, из-за чего в 5й выводится "1".
        Ответить
      • рекурсия только в присвоении

        https://ideone.com/ipULTq
        Ответить
        • Рекурсия была пока a[1] == a. Потом её сломали.
          Ответить
        • Ты бы этим ипаирсом ничего бы и не узнал даже если бы рекурсия бы существовала, а не была сломана еденицой! Ты бы просто получил бы таблицу!
          Ответить
          • в которой нет ссылок на обьект а
            Ответить
            • Я как бы получу эту же самую таблицу
              https://ideone.com/NfK6Mj
              Ответить
              • table: 0x833dd30 1

                не похоже на

                key 1 value 1
                key 21312 value 5

                правда?
                Ответить
                • Потому что я в саму таблицу не в нес ничего кроме ее самой в 1 элемент, откуда я смогу взять ссылку на нее и последующее 1 элементы. Все равно это одна и та же таблица.
                  Ответить
                  • Ты ебанутый?
                    Ять, я с гостем разговариваю как с живым человеком, надо срочно бухнуть
                    Ответить
      • $a->[0][0][0][0][0][0][0] = 1;


        Как это вообще заработало? там же кругом arrayref-ы. И во-вторых, кто же в здравом рассудке использует $a и $b вне sort (и подобных)?

        Нужно так:
        $a->[0]->[0]->[0]...

        http://ideone.com/4Ntr7z
        Ответить
        • > Как это вообще заработало?
          > Нужно так:

          перл5 автоматом hashref'ы и arrayref'ы дерефит в таких выражениях как минимум лет пятнадцать уже.

          http://perldoc.perl.org/perlref.html - "The arrow is optional between brackets subscripts"

          > И во-вторых, кто же в здравом рассудке использует $a и $b вне sort (и подобных)?

          читай "perldoc -f local" ( http://perldoc.perl.org/functions/local.html ) и оттуда дальше в доку тыкай.
          Ответить
          • перл не нужен
            Ответить
          • Вот поэтому на перле программировать интересно -- каждый день что-то новое.
            Ответить
    • показать все, что скрытоLUA не нужен
      Ответить
    • LUA говно
      Ответить
    • Ебать, тут есть раздел для LUA!
      А я уж подумал, что страйкер ожил.
      Ответить
      • Одно не исключает другого.
        Ответить
        • Можешь страйкер написан на Луа?

          Может страйкер - игра и написан на love?

          Можно ли тогда сказать, что страйкером движет любовь?
          Ответить

    Добавить комментарий