2017-05-08 1 views
1

루아에서 메타 테이블을 사용하지 않고 표를 인쇄 할 수 있습니까? 루아에서 로베르토의 책 프로그램에서루아에서 메타 테이블이없는 표를 인쇄하십시오

, 그는 "기능 print는 항상 출력 형식을 tostring를 호출"언급한다. 그것은 메타 테이블없이 할 수 없습니다

> a = {} 
> a.tostring = function() return "Lua is cool" end 
> print(a) 
table: 0x24038c0 
+0

"테이블 인쇄"란 무엇을 의미합니까? 표에 각 키와 값을 인쇄한다는 의미입니까? 서브 테이블에 키와 값을 인쇄하고 싶습니까? 루아에는 테이블을 인쇄하는 "표준"방법이 없으므로, 당신이하고 싶은 것을 정확히 따라 달라집니다. –

+0

일부 직렬화기를 가져 와서 출력을 인쇄하십시오. – FareakyGnome

답변

7

: 내 테이블에 tostring을 무시한다면, 나는 다음과 같은 결과를 얻을 수 있습니다.


기능 print는 항상 출력 형식을 tostring를 호출합니다.

당신이 이것을 잘못 이해했습니다. 여기서 tostring은 테이블의 필드가 아닌 tostring 함수입니다. 즉, print(t)print(tosstring(t))으로 전화 할 것입니다.

테이블의 경우 tostring(t)은 메타 메서드가 __tostring인지 확인한 다음 그 결과로 사용합니다. 그래서 결국 메타 테이블이 필요합니다.

local t = {} 
local mt = {__tostring = function() return "Hello Lua" end} 
setmetatable(t, mt) 
print(t) 
+2

'setmetatable (t, t)'를 호출하면'__tostring'은't'의 필드가 될 수 있습니다. – lhf