English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Lua에서 함수는 표현식과 표현을 추상화하는 주요 방법입니다. 특정 작업을 처리하거나 값을 계산하는 데 사용될 수 있습니다。
Lua는 많은 내장 함수를 제공하며, 이를 프로그램에서 쉽게 호출할 수 있습니다. 예를 들어, print() 함수는 전달된 매개변수를 컨트롤 타블에 출력할 수 있습니다。
Lua 함수는 주로 두 가지 용도가 있습니다:
1. 지정된 작업을 완료합니다. 이 경우 함수는 호출 문으로 사용됩니다;
2. 값을 계산하고 반환합니다. 이 경우 함수는 대입 문의 표현식으로 사용됩니다。
Lua 프로그래밍 언어 함수 정의 형식은 다음과 같습니다:
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn) function_body return result_params_comma_separated end
해석:
optional_function_scope: 이 매개변수는 선택적으로 함수가 전역 함수인지 지역 함수인지를 지정합니다. 매개변수를 설정하지 않으면 기본적으로 전역 함수로 설정됩니다. 함수를 지역 함수로 설정하려면 키워드 local。
function_name: 함수 이름을 지정합니다。
argument1, argument2, argument3..., argumentn: 함수 매개변수,여러 매개변수는 쉼표로 구분됩니다. 함수는 매개변수 없이도 사용할 수 있습니다.
function_body: 함수 본문,함수에서 실행해야 할 코드 문장 블록.
result_params_comma_separated: 함수 반환 값,Lua 언어 함수는 여러 값을 반환할 수 있으며 각 값은 쉼표로 구분됩니다。
다음 예제는 함수를 정의합니다 max(),매개변수는 num1, num2,두 값의 크기를 비교하고 최대값을 반환합니다:
--[[ 함수는 두 값을의 최대값을 반환합니다 --]] function max(num1, num2) if (num1 > num2) then result = num1; else result = num2; end return result; end -- 함수 호출 print("두 값 비교의 최대值为 " ,max(10,4))}} print("두 값 비교의 최대值为 " ,max(5,6))}}
위 코드의 실행 결과는 다음과 같습니다:
두 값 비교의 최대值为 10 두 값 비교의 최대值为 6
Lua에서는 함수를 함수에 전달할 수 있습니다. 다음 예제와 같이:
myprint = function(param) print("이것은 출력 함수입니다" - ##",param,"##) end function add(num1,num2,functionPrint) result = num1 + num2 -- 전달된 함수 매개변수를 호출합니다 functionPrint(result) end myprint(10) -- myprint 함수를 매개변수로 전달합니다 add(2,5,myprint)
위 코드의 실행 결과는 다음과 같습니다:
이것은 출력 함수입니다 - ## 10 ## 이것은 출력 함수입니다 - ## 7 ##
Lua 함수는 여러 결과 값을 반환할 수 있습니다. 예를 들어 string.find는 "www.w"와 같은 문자열에서 일치하는 문자열의 시작과 끝의 인덱스를 반환합니다. 일치하는 문자열이 없으면 nil을 반환합니다.
> s, e = string.find("ko.oldtoolbag.com", "w3codebox") > print(s, e) 5 10
Lua 함수에서 return 뒤에 반환하고자 하는 값을 나열하면 다중 값을 반환할 수 있습니다. 예를 들어:
function maximum (a) local mi = 1 -- 최대값 인덱스 local m = a[mi] -- 최대값 for i,val in ipairs(a) do if val > m then mi = i m = val end end return m, mi end print(maximum({8,10,23,12,5))
위 코드의 실행 결과는 다음과 같습니다:
23 3
Lua 함수는 C 언어와 유사하게 변경 가능한 수의 매개변수를 받을 수 있으며, 함수 매개변수 목록에서 세점 ...을 사용하여 함수가 변경 가능한 매개변수를 가지고 있다는 것을 나타냅니다.
function add(...) local s = 0 for i, v in ipairs{...} do --> {...}는 모든 변형 가능한 매개변수로 구성된 배열을 나타냅니다 s = s + v end return s end print(add(3,4,5,6,7))}} --->25
우리는 변경 가능한 매개변수를 변수에 할당할 수 있습니다.
예를 들어, 우리는 몇 개의 숫자의 평균을 계산할 수 있습니다:
function average(...) result = 0 local arg={...} --> arg은 테이블이며, 지역 변수입니다 for i,v in ipairs(arg) do result = result + v end print("전체로 입력된 " .. #arg .. " 개수") return result/#arg end print("평균값은",average(10,5,3,4,5,6))}}
위 코드의 실행 결과는 다음과 같습니다:
전체로 전달된 6 개수 평균 값은 5.5
우리는 select("#",...)를 통해 변경 가능한 매개변수의 개수를 얻을 수 있습니다:
function average(...) result = 0 local arg={...} for i,v in ipairs(arg) do result = result + v end print("전체로 입력된 " .. select("#",...) .. " 개수") return result/select("#",...) end print("평균값은",average(10,5,3,4,5,6))}}
위 코드의 실행 결과는 다음과 같습니다:
전체로 전달된 6 개수 평균 값은 5.5
때로는 몇 가지 고정 매개변수와 변화하는 매개변수가 필요할 수 있습니다. 고정 매개변수는 변화하는 매개변수 앞에 위치해야 합니다:
function fwrite(fmt, ...) ---> 고정 매개변수 fmt return io.write(string.format(fmt, ...)) end fwrite("w3codebox\n") --->fmt = "w3codebox", 변화하는 매개변수가 없습니다. fwrite("%d%d\n", 1, 2) --->fmt = "%d%d", 변화하는 매개변수는 1 와 2
출력 결과는 다음과 같습니다:
w3codebox 12
변화하는 매개변수를 순회할 때는 {…}만 사용하면 됩니다. 하지만 변화하는 매개변수에 nil이 포함될 수 있으므로 select 함수를 사용하여 변화하는 매개변수에 접근할 수 있습니다:select('#', …) 또는 select(n, …)
번째 매개변수를 반환합니다.
select(n, …)는 매개변수 목록의 n 번째 매개변수를 반환합니다.
select 함수를 호출할 때는 고정 매개변수 selector(선택 스위치)와 일련의 변화하는 매개변수를 전달해야 합니다. selector가 숫자 n이면 select가 매개변수 목록의 n 개 매개변수가 있으면 select가 변화하는 매개변수의 총 수를 반환합니다. 그렇지 않으면 문자열 #만 반환됩니다.
예제 코드:
do function foo(...) for i = 1, select('#', ...) do --> 매개변수 총 수 얻기 local arg = select(i, ...); --> 매개변수 읽기 print("arg", arg); end end foo(1, 2, 3, 4); end
출력 결과는 다음과 같습니다:
arg 1 arg 2 arg 3 arg 4