2013-04-20 4 views
1

В Lua это, кажется, что если один числовой ключ отсутствует в таблице, длина до сих пор продолжается подсчет:Длина последовательного стола в Lua может пропустить индексы?

> print(#{[1]=1,[2]=2,[4]=4}) 
4 

Но это пропускающие два индекса стопов на прорыве

> print(#{[1]=1,[2]=2,[5]=5}) 
2 

Это не просто несогласованный конструктор. Даже если пропущенный индекс создается после создания таблицы, он все еще отсчитывает прошлое, так что разрыв остается только одним.

> x={1,2} 
> print(#x) 
2 
> x[4]=4 
> print(#x) 

Является ли это ошибкой реализации или это как Lua должно работать. Почему так? Любые ссылки на документацию об этом были бы интересными.

ответ

3

Так оно и работает. Длина таблицы определяется только в том случае, если таблица представляет собой последовательность, без отверстий. См. http://www.lua.org/manual/5.2/manual.html#3.4.6.

+0

Спасибо. Я понимаю, что «#» действительно предназначено только для последовательных таблиц и что это может быть оправданием Lua для этого поведения, кажется странным, как он обрабатывает это «#» в несекретных таблицах. – DoubleMx2

 Смежные вопросы

  • Нет связанных вопросов^_^