Lua-모듈
모듈이란?
모듈은 require를 사용하여로드 할 수있는 라이브러리와 같 으며 테이블을 포함하는 단일 전역 이름을 갖습니다. 이 모듈은 여러 함수와 변수로 구성 될 수 있습니다. 이러한 모든 함수와 변수는 네임 스페이스 역할을하는 테이블에 래핑됩니다. 또한 잘 작동하는 모듈에는 필요시이 테이블을 반환하는 데 필요한 규정이 있습니다.
Lua 모듈의 전문성
모듈에서 테이블을 사용하면 다양한 방법으로 도움이되며 다른 Lua 테이블을 조작하는 것과 같은 방식으로 모듈을 조작 할 수 있습니다. 모듈을 조작하는 기능의 결과로 다른 언어에 특수 메커니즘이 필요한 추가 기능을 제공합니다. Lua의 이러한 무료 모듈 메커니즘으로 인해 사용자는 Lua에서 여러 가지 방법으로 함수를 호출 할 수 있습니다. 그 중 몇 가지가 아래에 나와 있습니다.
-- Assuming we have a module printFormatter
-- Also printFormatter has a funtion simpleFormat(arg)
-- Method 1
require "printFormatter"
printFormatter.simpleFormat("test")
-- Method 2
local formatter = require "printFormatter"
formatter.simpleFormat("test")
-- Method 3
require "printFormatter"
local formatterFunction = printFormatter.simpleFormat
formatterFunction("test")
위의 샘플 코드에서 특별한 추가 코드없이 Lua의 프로그래밍이 얼마나 유연한 지 확인할 수 있습니다.
필수 기능
Lua는 필요한 모든 모듈을로드하기 위해 require 라는 높은 수준의 기능을 제공했습니다 . 모듈에 대한 정보가 너무 많아서로드하지 않도록 최대한 간단하게 유지합니다. require 함수는 모듈을 일부 값을 정의하는 코드 덩어리로 가정합니다. 실제로는 함수 또는 함수를 포함하는 테이블입니다.
예
하나의 함수에 수학 함수가있는 간단한 예를 고려해 보겠습니다. 이 모듈을 mymath라고 부르고 파일 이름은 mymath.lua라고합시다. 파일 내용은 다음과 같습니다-
local mymath = {}
function mymath.add(a,b)
print(a+b)
end
function mymath.sub(a,b)
print(a-b)
end
function mymath.mul(a,b)
print(a*b)
end
function mymath.div(a,b)
print(a/b)
end
return mymath
이제 다른 파일 (예 : moduletutorial.lua)에서이 Lua 모듈에 액세스하려면 다음 코드 세그먼트를 사용해야합니다.
mymathmodule = require("mymath")
mymathmodule.add(10,20)
mymathmodule.sub(30,20)
mymathmodule.mul(10,20)
mymathmodule.div(30,20)
이 코드를 실행하려면 두 개의 Lua 파일을 동일한 디렉토리에 배치하거나 또는 모듈 파일을 패키지 경로에 배치 할 수 있으며 추가 설정이 필요합니다. 위의 프로그램을 실행하면 다음과 같은 결과가 나옵니다.
30
10
200
1.5
기억해야 할 사항
모듈과 실행하는 파일을 모두 동일한 디렉토리에 배치하십시오.
모듈 이름과 파일 이름은 동일해야합니다.
필수 기능에 대한 모듈을 반환하는 것이 모범 사례이므로 다른 유형의 구현을 다른 곳에서 찾을 수 있지만 모듈은 위에 표시된대로 구현하는 것이 좋습니다.
모듈 구현의 오래된 방법
이제 package.seeall 유형의 구현을 사용하는 이전 방식으로 동일한 예제를 다시 작성하겠습니다. 이것은 Lua 버전 5.1 및 5.0에서 사용되었습니다. mymath 모듈은 아래와 같습니다.
module("mymath", package.seeall)
function mymath.add(a,b)
print(a+b)
end
function mymath.sub(a,b)
print(a-b)
end
function mymath.mul(a,b)
print(a*b)
end
function mymath.div(a,b)
print(a/b)
end
moduletutorial.lua의 모듈 사용법은 다음과 같습니다.
require("mymath")
mymath.add(10,20)
mymath.sub(30,20)
mymath.mul(10,20)
mymath.div(30,20)
위를 실행하면 동일한 출력을 얻을 수 있습니다. 그러나 이전 버전의 코드를 사용하는 것이 좋으며 보안 수준이 낮은 것으로 간주됩니다. Corona SDK와 같은 프로그래밍에 Lua를 사용하는 많은 SDK는이 사용을 더 이상 사용하지 않습니다.