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는이 사용을 더 이상 사용하지 않습니다.