2009-09-13 2 views
2

루아 기능과 함께 정말 좋은 노 괄호 호출 구문이있는 DSL을 구현 폐쇄 내가 약 (태그) 괄호를 제거하는 경우 나, 그러나 그것을 다음루아 클로저

local tag = 1 
function test(obj) 
    return 
     function(str) 
      return 
      function (tbl) 
       tbl.objtag = tag 
       tbl.objname = str 
       return tbl 
      end 
     end 

end 
test (tag) "def" 
{ 
} 

test tag "def" --error 
{ 
} 

를 작성할 수 있습니다 컴파일 오류가 발생합니다. 왜 루아 노 괄호 매개 변수 (즉, "DEF")와하지 (이 경우 테이블) 노 괄호 var에 매개 변수를 허용하지 않습니다? Programming in Lua에서

답변

3

:

함수가 하나 개의 인자를 가지고 있으며,이 인수는 리터럴 문자열 또는 테이블 생성자 중 하나 인 경우, 괄호는 선택 사항 : 당신의 위의

나의 이해 상황이 이렇게 test(tag) 항상 괄호가 필요합니다 (리터럴 문자열이나 테이블 생성자도 인)이 태그는 지역 변수입니다. 당신은 test(tag)은 하나의 문자열을 허용하는 기능을 반환하고, 그 기능이 즉시 "def"에 적용되기 때문에하지이 "def" 괄호를 필요로 할 .

+1

는 설명 주셔서 감사합니다. 나는 – jameszhao00

+0

당신이 모든 괄호를 넣어 "처리기"어떤 종류의를 통해 DSL에 대한 입력을 실행할 수있는 이유가 ... 전체 깃털 DSL에 가까운입니까? –

+0

그렇습니다. 그것은 당신이 묘사하는 것을합니다. – jameszhao00