Метатабличный / Говнокод #19875 Ссылка на оригинал

0

  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 Sfabrikan, (Updated )

Комментарии (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
    Ответить
  • Говно, автор дибил, не нужен индекс в виде таблицы.
    автор не нужен
    Ответить
  • И? Автор только что узнал о существовании хэш-таблиц?
    Ответить
        • > print ({} == {})
          false

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

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

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8