2013-10-15 5 views
0

루아의 초보자로서, 이것에 대한 대답이 쉬운 것이면 유감입니다. 코드에서 함수를 호출하려고했지만 2 시간 동안 검색 한 결과 원하는 결과를 찾을 수 없었습니다. 누군가가 나를 도울 수 있다면함수 이름을 호출하는 것

function Test123()  
    SayTest = True 
    if SayTest = True then   
     SystemNotice (role, 'Test123') 
    end 
end 

것은, 내가 감사 할 것 :

예제 코드

function Test123()  
    SayTest = True 
    if SayTest = True then 
     -- This Is where I want to call the function name Test123, 
     -- yet I can't seem to succeed in this since it is just 
     -- starting a new function 
     SystemNotice (role, function) 
    end 
end 

이 결과이어야한다 (? 어쩌면 내가 잘못 검색 쿼리의 사용). 제가 아직 명확하지 않다면, 저에게 말씀하십시오. 나는 그것을 더 잘 묘사하려고 노력할 것입니다. 내 제한된 영어에 대한 나의 변명.

+3

달성하려는 목표가 명확하지 않습니다. 코드에서 수행해야 할 작업을 간단한 단어로 설명하십시오. @solarbear가 이미 지적한 바와 같이, 게시 한 단편은 너무 제한적이며 더 많은 문법적 문제가 있습니다. 오류는 무엇입니까? –

+2

@ user2884099 루아는 bool 리터럴에 키워드'true'와'false'를 사용합니다. – greatwolf

+0

@LorenzoDonati - OP는 현재 함수의 이름을 실시간으로 얻고 싶습니다 (이 경우 'Test123'). –

답변

0

함수 선언에 end이 없습니다.

function Test123() 
end 

the Lua manual의 기능 장을 읽으십시오. 기록을 위해 ifend이 필요합니다.

2

실제로 루아 함수는 값인입니다. 즉, 실제로 이름이 없으며 변수 또는 테이블 필드에만 할당 할 수 있지만 값 자체에는 이름 개념이 없기 때문에 값을 검색 할 수 없습니다. debug 라이브러리 말했다

, 당신은이 작업을 수행 할 수 있습니다 : 이것은 단지 기본 루아 오류 처리기 또는 동일하거나 매우 유사한 출력을 반환 하나를 작동

function getfname() 
    return debug.traceback("", 2):match("in function '(.-)'"); 
end 
function bar() 
    print(getfname()) 
end 

bar();    -- prints bar 
foo = bar; 
foo()    -- prints foo 
knerf = {rab = bar}; 
knerf.rab()  -- prints rab 

주, 그러나 당신은 분명 수 필요한 것을 맞추기 위해 패턴을 수정하십시오.

읽어보기 : 성능 집중적 인 작업에 대해서는이 솔루션을 권장하지 않습니다. 문자열 매칭과 역 추적은 이것에 정말로 적합하지 않습니다. 또한 실제로 디버그 라이브러리가 활성화되어야 트레이스 백 기능을 실제로 사용할 수 있습니다.

0

이것은 루아 철학에 반하는 구조로, 함수는 일등 시민입니다. 함수는 또 다른 값이며, 이름이 없습니다.

변수에 값을 할당 할 수 있으므로 함수를 이름에 바인딩 할 수 있습니다. 하지만 그 이름은 바뀔 수 있습니다. 또는 함수가 여러 이름을 가질 수 있습니다. 어느 것을 골라야합니까?

더 나은 솔루션 대신 upvalue (폐쇄)와 익명 함수를 만드는 것 :

function genTest(name) 
    return function()  
     SayTest = true 
     if SayTest == true then   
      print ('role', name) 
     end 
    end 
end 

Test123 = genTest('Test123') 
Test123() 
foobar = Test123 
foobar() 

이것은 바운드 지역 변수 이름을 가진 함수를 (PiL 6.1 참조)를 생성한다.

관련 문제