문제

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".

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top