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

    +14

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    a = {}
    a[{}] = 100500
    local store
    	for i, k in pairs(a) do
    		print(i,k) --table, 100500
    		store = i
    	end
    print(a[{}]) --nil
    print(a[store]) --100500

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

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

    • еще вот так можно побаловатся

      a = {}
      b = function() end
      a[b] = 100500
      local store
      	for i, k in pairs(a) do
      		print(i,k) --table, 100500
      		store = i
      	end
      print(a[b()]) --nil
      print(b()) --ничего не выводит
      print(a[store]) --100500
      print(a[b]) --100500

      Ответить
    • Говно, автор дибил, не нужен индекс в виде таблицы.
      автор не нужен
      Ответить
    • И? Автор только что узнал о существовании хэш-таблиц?
      Ответить
      • Суть как я понимаю в
        > a[{}] = 100500
        > print(a[{}]) --nil
        Ответить
        • Объясните, почему так происходит?
          Ответить
          • > print ({} == {})
            false

            Потому что каждый литерал таблицы создаёт новый объект, и их сравнение неглубокое.
            Ответить
            • >их сравнение неглубокое.
              Што?

              == сравнивает равенство или идентичность?
              Ответить
              • >>их сравнение неглубокое.
                >Што?
                Объекты не сравниваются с точностью до полей и полей полей, и полей полей полей, ..., то есть структуру объекта глубоко не копают.
                Ответить
                • Каshitцын явно имел в виду что-то другое, т.к. пустые таблицы.
                  Ответить
                  • Видимо, в обсуждаемом комментарии сравнение ссылок считается неглубоким сравнением глубины ноль, сравнение полей - неглубоким сравнением глубины один, сравнение полей с рекурсивным обходом полей-ссылок - глубоким сравнением.
                    Ответить
                    • Путать неглубокое сравнение со сравнением идентичноти ссылок имхо могут только нубососы.
                      Ответить
                      • Неглубокое сравнение само принуждает к путанице.
                        Что есть объект? Совокупность полей как таковых или иерархическое представление с учётом зависимостей?
                        Если первое, то неглубокое сравнение, отличаемое от сравнения идентичности ссылок не должно отличаться от глубокого, т.к. нет необходимости проходить по ссылкам.
                        Соответственно, различая неглубокое и глубокое сравнение, мы различаем алгоритмы по наличию или отсутствию сравнения идентичности ссылок при проверке эквивалентности полей объекта, сравнение идентичности ссылок является частью неглубокого сравнения.
                        Если мы представляем объект в виде некоторого дерева, построенного на ссылках, и работаем с объектом по ссылке, мы логически сопоставляем наш иерархический объект и эту ссылку. Ссылку можно рассматривать как 1-набор или структуру с одним полем, а значит сравнение по ссылке считать неглубоким сравнением объектов, причём это имеет смысл.
                        Ответить
                        • Ну тут просто сразу получается иерархия сравнений. Сравнение ссылок - нулевой порядок. Сравнение ссылок на поля - первый. И так ad infinum.
                          Ответить
    • >> a[{}]
      Это что? Вагина? С волосатой родинкой слева?
      Ответить

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