2010-06-22 2 views
2

제가 개발 한 루아 라이브러리에 대한 일부 (비 html) 문서를 생성하고 있습니다. 나는 수동으로 문서를 생성 할 것이지만, 가능하다면 어떤 종류의 자동화에 감사 할 것입니다. (즉, 함수를 작성할 수 있도록 각 함수의 뼈대를 생성합니다)lua - 함수 외부에서 함수의 매개 변수 이름 목록을 얻습니다.

루아에 대한 방법이 있는지 알고 싶습니다. 함수 외부에서 가져 오는 매개 변수의 이름을 알아야합니다.

예를 들어 루아에서이 작업을 수행 할 수있는 방법이 있습니까?

function foo(x,y) 
    ... -- any code here 
end 

print(something ... foo ... something) 
-- expected output: "x", "y" 

고마워요.

답변

3

debug.getinfo을 살펴보십시오.하지만이 작업을 수행하려면 파서가 필요할 것입니다. 실제로 함수를 실행하지 않고 환경 테이블 (debug.debugdebug.getlocal 참조)을 검사하지 않고 루아에서 함수의 매개 변수를 가져 오는 방법을 알지 못합니다.

+0

감사합니다. 그 사람들이 어딘가에 연결되어 있어야합니까? – kikito

+0

예, 온라인 Lua 참조 설명서의 해당 섹션에 대한 링크입니다. –

+0

나는 debug.getinfo로 시도 할 것이다. 감사! – kikito

1

luadoc 유틸리티를 살펴보십시오. 그것은 일종의 Doxygen과 같지만 Lua를위한 것입니다. 문서가 소스 코드와 함께 온라인으로 작성 될 수 있도록하기위한 것이지만 문서 구조의 템플리트를 작성하여 별도로 처리 할 수 ​​있습니다. 물론, 템플릿 메커니즘은 길 아래에 유지 보수 문제를 남길 것입니다 ...

+0

'루아 독 '에 대한 나의 경험은 가난했다. 대신 모듈 내에서 메타 데이터로 설명서를 작성했습니다. 포스터의 질문에 대해서는 lhf의 대답이 결정적이라고 생각합니다. –

+0

Luadoc은 분명히 기발합니다. 루아는 함수에 대한 좋은 문서 서명을 얻는 것을 쉽게하지 않으며, 루아 독 (luadoc)의 단점은 대부분 그것과 관련이있다. C++로 작성된 루아 라이브러리에 대한 문서와 관련된 문제가 있었는데, 여기서는 Doxygen이 모든 루아 호출 가능 함수가 동일한 불투명 한 서명을 가지고 있기 때문에 전혀 도움이되지 않습니다. – RBerteig

+0

@Norman Ramsey : "모듈의 메타 데이터"에 대해 더 자세히 알고 싶습니다. 샘플/문서가 있습니까? – kikito

4

시도해보십시오 bytecode inspector library. 루아 5.2에서는 debug.getlocal을 사용할 수 있습니다.

+0

필자는 지금 루아의 디버그 기능을 고수 할 것입니다. 그러나 당신의 대답에 감사드립니다. 나는이 질문을 찾는 다른 사람들에게 유용 할 수 있다고 생각합니다. – kikito

4

확인, 여기에 핵심 코드 :

function getArgs(fun) 
local args = {} 
local hook = debug.gethook() 

local argHook = function(...) 
    local info = debug.getinfo(3) 
    if 'pcall' ~= info.name then return end 

    for i = 1, math.huge do 
     local name, value = debug.getlocal(2, i) 
     if '(*temporary)' == name then 
      debug.sethook(hook) 
      error('') 
      return 
     end 
     table.insert(args,name) 
    end 
end 

debug.sethook(argHook, "c") 
pcall(fun) 

return args 
end 

당신은 다음과 같이 사용할 수 있습니다

print(getArgs(fun)) 
관련 문제