《루아프로그래밍》 독서노트 제5장: 함수

4225 단어
Lua에서 함수에 매개변수가 하나뿐이고 이 매개변수가 글꼴 문자열 또는 table 구성일 경우 괄호는 생략할 수 있습니다.
print("hello world")
print "hello world"

Lua는 대상식 호출에 대해서도 특수한 문법인 사칭 조작부호를 제공했다.Lua에서 o.foo(o,x)와 o:foo(x)는 등가이며, o.foo를 호출할 때 o를 함수의 첫 번째 인자로 은밀하게 사용합니다.루아 프로그램은 루아로 작성된 함수를 사용할 수도 있고 c 언어로 작성된 함수를 호출할 수도 있다.Lua의 함수 호출에서 실삼 수량은 형삼 수량과 같을 필요가 없다. Lua는 실삼의 수량을 자동으로 조정하여 형삼과 일치하게 하고 그 메커니즘은 다중 할당치와 같다.

5.1 다중 반환값


Lua는 함수가 여러 개의 되돌아오는 값을 되돌려줍니다. Lua의 몇 개의 미리 정의된 함수는 여러 개의 값을 되돌려주는 것입니다.예컨대string.find. 일치하는 문자의 시작 인덱스를 되돌려줍니다.
s,e = string.find("hello Lua", "Lua")
print(s, e) -->7, 9

Return 키워드 뒤에 모든 반환 값만 표시하면 Lua에서 여러 반환 값을 반환할 수 있습니다.
function foo()
    return 1, 2
end
x, y = foo()

주의해야 할 것은 함수가 호출될 때 일련의 표현식의 마지막 요소가 호출될 때만 모든 반환 값을 얻을 수 있다는 것이다.이 일련의 표현식은 네 가지 상황을 포함하는데 그것이 바로 다중부치, 함수 호출 시 전송되는 실참, 테이블 구조식,return 문장이다.
function foo2() return a, b end
x,y = foo2()  -->x=a, y = b
x,y = f00()2, 20 -->x = a, y = 20, foo2         。

또한 한 쌍의 괄호에 함수를 호출하여 하나의 결과만 반환하도록 할 수도 있습니다.
print((foo2())   -->a

다중 반환 값에 대해 또 하나의 특수한 함수 - unpack이 있습니다.매개변수로 배열을 적용하고 다음 표 1부터 해당 배열의 모든 요소를 반환합니다.
print(unpack(10, 20, 30))   -->10 20 30

unpack의 중요한 용도는 '일반 호출' 에서 사용되며, 모든 함수를 동적으로 실제 참조로 호출할 수 있습니다.

5.2 길이 변환 매개변수


매개 변수표의 세 점(...)은 이 함수가 서로 다른 수량의 형삼을 받아들인다는 것을 나타낸다.함수가 길어지는 매개 변수에 접근하려면 세 개의 점을 사용합니다.
function add(...)
    local s = 0
        for i, v inpairs {...} do
            s = s+ v
        end
    end
    return s
end

표현식 {...}은 길어진 매개변수로 구성된 배열을 나타냅니다.특정 함수 호출을 추적하는 방법이 있습니다.
function foo1()
    print("callinng foo:", ...)
    return foo(...)
end

가변 매개 변수가 있는 함수 역시 임의의 수량의 고정 매개 변수를 가질 수 있지만 고정 매개 변수는 반드시 길어지는 매개 변수 앞에 두어야 한다.select를 사용하여 길어진 매개변수에 액세스할 수 있습니다.
select(n,...)       -->   n     
select('#', ...)    -->    ‘#’,           

5.3 구명 실참


구명 매개 변수는 실참의 배열 순서를 고려하지 않고 이름을 통해 매개 변수를 지정하는 것을 가리킨다.만약 함수가 대량의 매개 변수를 가지고 있는데, 그 중 대부분이 선택할 수 있다면, 이런 매개 변수 전달 스타일은 매우 유용할 것이다.Lua는 Table을 통해 구명 실참과 유사한 기능을 실현합니다.

좋은 웹페이지 즐겨찾기