DSL 구현에서 LUA 폐쇄
-
07-07-2019 - |
문제
LUA에는 기능 폐쇄와 결합 된 정말 멋진 No-Parenthesis Call Syntax가 있습니다.
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
{
}
그러나 (TAG) 주위의 괄호를 제거하면 컴파일 오류가 발생합니다. 그렇다면 LUA가 왜 나라가없는 매개 변수 (예 : "def")를 허용하고 no-parenthesis var (이 경우 표) 매개 변수를 허용합니까?
해결책
에서 LUA의 프로그래밍:
함수에 하나의 단일 인수가 있고이 인수가 문자 그대로 문자열 또는 테이블 생성자 인 경우 괄호는 선택 사항입니다.
위의 상황에 대한 나의 이해는 태그가 로컬 변수 (문자 그대로 또는 테이블 생성자가 아님)라는 것입니다. test(tag)
항상 괄호가 필요합니다. 너 ~하지 않다 주변의 괄호가 필요합니다 "def"
왜냐하면 test(tag)
단일 문자열을 수락하는 함수를 반환하면 해당 기능이 즉시 적용됩니다. "def"
.
제휴하지 않습니다 StackOverflow