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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
math.randomseed(os.time())

local a = {}

a[#a+1] = function() --create
	local t = {}
	t[#a+1] = math.random(1,100)
	t[#a+2] = 'хуй'
	return setmetatable(t,{__index = a})
end

a[#a+1] = function() --empty function
end

local t = a[1]()
for k,v in ipairs(t) do
	print(k,v) --показывает все элементы таблицы как положено
end
print(#t) --0
print(t[4]) --хуй

Загадка: почему длина таблицы t = 0?

ps. # - это оператор возращает длину

Запостил: Sfabrikan Sfabrikan, (Updated )

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

  • > почему длина таблицы t = 0
    > setmetatable
    Потому что доигрались с метатаблицами?
    Ответить
    • почти, но все намного хитрее, ведь таблица t возращается
      function x()
      local t = {"kaka"}
      return setmetatable(t,{__index = x})
      end
      
      print(#x()) --1
      Ответить
    • Ладно скажу ответ.
      Потому что 1 и 2 элемента у t не существует
      а # вернет длину до первого разрыва!
      Соответственно первый разрыв в 1 элементе, по этому длина 0.
      А в цикле как бы показывается что якобы есть 1 и 2 элемент, но это пиздешь, это лишь ссылки на элементы a.
      Ответить
  • Код говно.
    ВНИМАНИЕ. ГОВНОКОДНАДЗОР ПРЕДУПРЕЖДАЕТ! ЧЕРЕЗМЕРНОЕ ЗЛОУПОТРЕБЛЕНИЕ ОПРЕДЕЛЕНИЯ ДЛИНЫ ВРЕДИТ БЫСТРОДЕЙСТВИЮ!
    Ответить
  • Кто постарался тут ботами и выпилил несколько ЯП от сюда?
    Ответить

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

Переведи на "PHP", guest!

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


    8