Возвращаемое значение из table.remove
- это удаленный элемент ("fruits")
Объект является строкой и имеет длину 6, объясняющую ответ, который получает ваш код.
ЕслиВы хотели получить правильный ответ 2, тогда следующий код сделает это.
fruits = {}
function addToFruits(t)
print(#t)
end
function parseTable(t)
if t[1] == "fruits" then
table.remove(t, 1)
addToFruits( t ) --pass only {"apple", "banana"}
end
end
parseTable({"fruits", "apple", "banana"})
Очевидно, что это повредит исходную таблицу, и в зависимости от использования потребуется либо копия таблицы - на эту тему есть разные статьи.
В предпочтении я бы использовал такую структуру, как ... message = { type = "fruits", data = { "apple", "banana" } }
, позволяющую отделить данные от типа сообщения.
Новый код будетпохож на ....
fruits = {}
function addToFruits(t)
print(#t)
end
function parseTable(t)
if t.type == "fruits" then
addToFruits( t.data ) --pass only {"apple", "banana"}
end
end
message = { type = "fruits", data = { "apple", "banana" } }
parseTable( message )