2013-08-02 1 views
2

루아에서는 메시지 인수를 사용하여 표준 error() 함수를 호출하면 제공된 오류 메시지가 출력되고 스택 추적도 인쇄됩니다. 다음 코드를 실행 :Lua : 인수없이 error()를 호출 할 때 스택 추적이 없습니까?

print("hello") 
error("oops!") 
print("world") 

는 다음과 같은 출력을 초래할 것 :

$ lua test.lua 
hello 
lua: test.lua:2: oops! 
stack traceback: 
    [C]: in function 'error' 
    test.lua:2: in main chunk 
    [C]: ? 

을하지만, 인수없이 error()를 호출하면 루아 스택 추적을 인쇄하지 않고 자동으로 죽게 할 것으로 보인다.

print("hello") 
error() // no arguments provided 
print("world") 

이 출력 될 것입니다 :

$ lua test2.lua 
hello 

문서가 처음 message 인수 생략에 대해 아무 말도하지 않습니다이 코드를 실행

오류 (메시지 [레벨 ])

마지막으로 보호 된 함수를 종료하고 메시지를로 반환합니다.오류 메시지 함수 오류가 반환되지 않습니다. 일반적으로 오류는 메시지의 시작 부분에있는 오류 위치에 대한 정보를 에 추가합니다. level 인수는 오류 위치를 가져 오는 방법을 지정합니다. 수준 1 (기본값)에서 오류 위치는 오류 함수가 호출 된 곳입니다. 수준 2는 오류를 호출 한 함수 이 호출 된 위치로 오류를 지정합니다. 등등. 0 레벨을 건네면 메시지에 오류 위치 정보가 추가되지 않습니다.

이것이 의도 된 동작인지 아닌지 궁금한가요? 심지어 메시지가 제공되지 않는 경우에도 assert() 기능이 작동하기 때문에 스택 추적을 인쇄하고 (예 : 기본 텍스트 (예 : error)를 출력 할 수 있습니다.)

답변

6

문서는 첫 번째 메시지 인수 생략에 대해 아무 말도하지 않습니다

을 네, 수행, error()이 같은 프로토 타입이 있습니다

error (message [, level]) 

공지 사항 만 인수 [] 내부는 선택 사항이며이 경우 level입니다. 그렇지 않은 경우 인수는 필수 항목이며이 경우 message입니다.

assert()의 프로토 타입과 비교 :

assert (v [, message]) 

당신이 볼 수 있듯이, messageassert()에는 선택 사항입니다.

+0

그래, 나는'메시지'는 필수이지만 여전히 그것 없이는 작동한다는 것을 알 수있다. –

+2

@DmitryPashkevich'error'는'message' 인자를 기대하기 때문에 실제로 작동하지 않는다. 그렇지 않으면 함수 구현에 따라 달라지며 다른 오류가 발생할 수 있습니다.'error ("")' –

+1

@DmitryPashkevich 빈 문자열을 전달하기를 원한다면, Lua는 호환되지 않는 인자를 가지고 있기 때문에 괜찮습니다.이 경우'error'는 첫 번째 인자를'nil'으로받습니다. –

관련 문제