Почему некоторые таблицы в Lua отображаются по-разному, когда к ним вызывается print (sometable)? - PullRequest
1 голос
/ 21 августа 2010

Меня смущает поведение, которое я наблюдаю, когда использую luaxml для анализа строки XML. В документе Lua указано, что вызов print () для табличной переменной таков:

print(type(t))  
print(t)

приведет к выводу, как это:

t2:        table  
t2:        table: 0095CB98

Однако, когда я использую luaxml как таковой:

require "luaxml"

s = "<a> <first> 1st </first> <second> 2nd </second> </a>"  
t = xml.eval(s)

print("t:       ", type(t))  
print("t:       ", t)  

Я получаю следующий вывод:

t:        table  
t:        <a>  
  <first>1st</first>    
  <second>2nd</second>  
</a>  

Почему print(t) не возвращает результат, похожий на первый пример?

Ответы [ 2 ]

5 голосов
/ 21 августа 2010

Функция print использует tostring для преобразования своих аргументов в строки.

Когда tostring вызывается с таблицей, а у метатаблицы таблицы есть поле __tostring, тогда tostring вызывает соответствующее значение с таблицей в качестве аргумента и использует результат вызова в качестве своего результата.

Я подозреваю, что в luaxml есть такой __tostring метаметод в таблице, полученный из xml.eval(s).

0 голосов
/ 21 августа 2010

Вы можете определить функцию __tostring в таблице метатаблицы, чтобы получить этот результат. Когда вы передаете эту таблицу в print (), если у вас есть функция __tostring в вашем метатаблице, print () выведет результат оценки этой функции вместо использования метода по умолчанию (который просто печатает адрес памяти таблицы) .

...