[lua] 자색 고양이 루아 튜토리얼 - 명령 보전 - L1-01-10.사용자 정의 함수

14119 단어

L1[function]01. 함수 정의 및 호출


함수의 정의와 개념은 말할 것이 없다
루아의 함수 성명과 호출은 선후 순서가 있는 선성명 후 호출이다
함수는 변수의 일종이기 때문에 함수를 변수 간에 자유롭게 값을 부여할 수 있지만 함수 변수와 표 변수의 차이가 많지 않은 것은 메모리 주소 바늘을 저장하는 것이다
aa=function(x, y) - 빨간색 부분은 이른바 루아의 익명 함수이지만 정말 명실상부하지 않다print(x, y)endaa(1,2)

L1[function]02. 역할 영역과 반환 값


L1[function]03. 복수 반환값


function test(x, y,z)return x+1, y+1, z+1--end a, b, c=test(1,2,3)print(a, b, c)
작은 지식:return은 함수 내에서 약간의 주의사항을 얻습니다.return은 함수 내에서 일반적으로 함수 코드의 마지막 줄(공행 end 같은 것은 자연히 계산되지 않습니다.)return 문장 뒤에 다른 코드를 강제로 넣으면 오류가 발생할 수 있습니다
function test(x,y,z)
    return x+1,y+1,z+1
    print("1")--  D:\Program Files (x86)\zerobrane\bin\lua53.exe: E:\lua\test15.lua:3: 'end' expected (to close 'function' at line 1) near 'print'
end
a,b,c=test(1,2,3)
print(a,b,c)

그런데 어떤 코드는 리턴 뒤에 적혀있어요. 괜찮아요. 그런데 몇 개만else elseif end...
function test1(a,b)
    
    if (a>b) then
        return " "
    elseif (a==b) then
        return " "
    else
        -- a
        return " "
    end
end

L1[function]04. 매개 변수의 전달


함수 의 매개 변수 는 함수 의 국부 변수 이다
만약에 함수의 매개 변수가 일반 변수가 아니라 대상이 흔히 볼 수 있는 대상이라면 주의해야 한다. 예를 들어table 형식표 변수에 저장된 것은 사실 하나의 바늘이 함수 매개 변수로 전달된 것이고 하나의 바늘 주소 매개 변수가 대상이 되어 함수 내부에서 이 대상의 바늘에 대해 일련의 조작을 하는 것은 수치 문자열처럼 바깥의 이 변수에 영향을 주지 않는 것이 아니다
-- 100
function test2(a)
    if (type(a)=="table") then
        a[1]=100
    else
        print("not table")
    end
end
xx={1,2,3,4,5}-- 
for v,k in pairs(xx) do-- 
    print(v,k)
end
print("=================")
test2(xx) -- xx 
for v,k in pairs(xx) do--   
    print(v,k)
end
--   

결과
1 2 2 3 4 5 ===================== 1 100 2 3 4 5 프로그램은 0.20초에 완성되었다(pid: 16008).
작은 지식: 루아의 패키지 이해
https://www.cnblogs.com/zzy-frisrtblog/p/5864209.html 
작은 지식: upvalue는 사실 c하의 정적 국부 변수로 이해할 수 있다
정적 부분 변수의 일반적인 특징:
1. 함수체 내에서 정적 변수를 정의하는 동시에 초기화되면 이후 프로그램은 초기화 작업을 하지 않습니다.
2.auto 자동 변수는 함수가 호출되고 종료됨에 따라 존재하고 사라지며,static류 국부 변수는 사라지지 않습니다.그것은 그 함수가 호출되든 안 되든 항상 존재할 것이다.그러나 이 변수는 계속 존재하지만 사용할 수 없습니다.만약 정의된 함수를 다시 호출할 때, 함수를 계속 사용할 수 있으며, 이전에 호출된 후에 남은 값을 저장할 수 있습니다.다시 말하면 Static 유형의 내부 변수는 특정한 함수에서만 사용할 수 있지만 저장 공간을 차지하는 변수이다.

L1[function]05. 옵션 매개변수


작은 지식 가변 매개 변수는 말할 것도 없고 매개 변수의 수량이 확실하지 않을 때의 선택은... 그러나 또 다른 특수한 상황, 예를 들어 매개 변수에 값이 섞여 있으면 모든 매개 변수를 훑어보면 문제가 생길 수 있다
function test(...)
    -- 1 
    local tempTable=table.pack(...)
    
    -- 
    if (type(tempTable)=="table") then
        for v,k in pairs(tempTable) do
            print(k)
        end
    else
        print("not table")
    end
end
test(1,2,3,4,5,6,7,8,9,0)

특수한 상황, 예를 들어 매개 변수에 값이 섞여 있으면 모든 매개 변수에 문제가 생길 수 있습니다. 이 상황을 피하기 위해 변수 변수의 함수 기본 구조는 이렇습니다.
function test(...)
    -- 1 
    local tempTable=table.pack(...)
    print(tempTable.n)-- n table.pack     nil   
    
    -- 
    if (type(tempTable)=="table") then
        -- value ,key 
        for i=1,tempTable.n do            
             print(tempTable[i])
        end
    else
        print("not table")
    end
end
test(1,2,nil,4,5,nil,nil,8,9,0)

결과
1 2 nil 4 5 nil nil 8 9 0
가변 매개 변수는 고정 매개 변수와 혼합할 수도 있지만 고정 매개 변수는 반드시 앞에서 가변 매개 변수를 깔아야 한다
function test(a,b,c,…)
작은 지식: 함수를 호출할 때 얼마나 많은 매개 변수를 일일이 대응해야 하는지, 쉽게 쓰지 않으면 비울 수 있을 것 같지만, 루아에서는 일일이 대응해야 하는지, 안 되면 대응하는 위치에nil을 붙여도 돼요. 틀리지 않아요.
function test1(a,b,c)
    print(a,b,c)
end
test1(1,,3)-- D:\Program Files (x86)\zerobrane\bin\lua53.exe: E:\lua\test18.lua:21: unexpected symbol near ','
test1(1,nil,3)

123
작은 지식: 함수 기본값의 쓰기 매개 변수는nil입니다. 초기값을 부여하면 되지만, 매개 변수 내용이false일 때 기본값이 잘못되었음을 주의하십시오.
function test1(a,b,c)
    --   
    a=a or 1
    b=b or 2
    c=c or 3
    
    print(a,b,c)
end
test1(2,nil,4)

결과
2    2    4
물론 전달된 매개 변수의 내용은false일 수 없습니다. 기본값은 잘못된 값을 선택하지만 일반적인 상황에서는 나타나지 않습니다.
function test1(a,b,c)
    a=a or 1
    b=b or 2
    c=c or 3
    
    print(a,b,c)
end
test1(false,nil,4)-- 1    2    4   false   1 1

123

L1[function]06. 가변 길이 매개변수


L1[function]07. 키 플러그인 함수 예


작은 지식: 키 플러그인의 루아 쓰기간단해요. 함수 쓰기가 좀 필요해요. 다른 건 없어요.
function QMPlugin.test()
end
다음으로 전송:https://www.cnblogs.com/zjl8455482/p/11222937.html

좋은 웹페이지 즐겨찾기