(→객체) |
잔글 (Chirho님이 사용자:Cerulean/메모장/루아 문서를 넘겨주기를 만들지 않고 사용자:하늘/메모장/루아 문서로 이동했습니다: "Cerulean" 사용자의 이름을 "하늘"(으)로 바꿀 때 문서를 자동으로 이동했습니다) |
(차이 없음)
|
2022년 5월 11일 (수) 10:30 판
사용자:Cerulean/노트패드/styles.css 문서에 내용이 없습니다.
루아 '.' ':'
닷 연산자는 자기 자신을 가리키는 self를 따로 입력해야 하고 콜론 연산자는 self가 포함되어있다.
함수 호출 대체 형태
print "Hello World" print("Hello World")
dofile 'a.lua' dofile ('a.lua')
print [[a multi-line message]] print([[a multi-line message]])
f{x=10, y=20} f({x=10, y=20})
type{} type({})
괄호 생략 가능
객체
루아는 객체를 지원하지 않는 언어입니다. 그래도 테이블을 이용해서 객체 비슷하게 만들 수 있습니다.
local point = function (x, y) --- class 기본 생성자 역할을 하는 익명 함수
--- C++ class의 public:에 해당
local obj = {}
obj.x = x or 0
obj.y = y or 0
--- set point x, y
function obj:set(x, y)
self.x = x;
self.y = y
end
--- x값 얻기
---@return number
function obj:getX() return self.x end
--- y값 얻기
---@return number
function obj:getY() return self.y end
--- x:y 출력
function obj:print()
print(self.x .. ':' .. self.y)
end
--- x와 y의 평균을 계산
function obj:calcmean()
self.mean = (self.x + self.y) / 2
end
return obj -- 테이블 반환
end
local asdf = point(1, 2)
asdf:print() -- 1:2
asdf.print(asdf) -- 1:2 : 연산자가 아닌 경우 자기 자신을 입력해야 합니다.
asdf:calcmean() -- 평균 계산
print(asdf.mean) -- 평균 출력 1.5
asdf = nil
-- 객체를 지울 때는 nil을 넣어서 값이 없다고 해주면 됩니다.
c++ 코드는 아래와 같습니다.
#include <iostream>
using namespace std;
class point {
public:
int x = 0;
int y = 0;
double mean = 0;
point(int x = 0, int y = 0) { this->x = x, this->y = y;}
void set(int x, int y) {
this->x = x, this->y = y;
}
int getX() { return x; }
int getY() { return y; }
void print() { cout << x << ":" << y << "\n" ;}
void calcmean() { mean = (x + y) / 2. ;}
};
int main()
{
point* asdf = new point(1, 2);
asdf->print();
asdf->calcmean();
cout << asdf->mean;
delete asdf;
}
이번에는 private 변수가 있는 객체입니다.
---class 기본 생성자 역할을 하는 익명 함수
---@return table
local data = function ()
local obj = {
sum = 0, mean = 0, var = 0
}
local data = {}
local size = 0
---합계 구하기
obj.calcSum = function(self)
size = #data
for i = 1, size do
self.sum = self.sum + data[i]
end
end
--- 평균 계산하기
function obj:calcmean()
self.mean = self.sum / #data
end
function obj:getVar()
local sum; size = #data
for i = 1, size do
local meanMdata = self.mean - data[i]
sum = sum + meanMdata^2
end
self.var = sum / size
end
function obj:insert(_data)
table.insert(data, _data)
end
return obj -- 테이블 반환
end
local data1 = data()
data1:insert(1)
local s = io.read()
while s ~= '`' do
s = io.read()
data1:insert(tonumber(s))
end
data1:calcSum()
data1:calcmean()
print(data1.mean)
frame
#invoke 문으로 호출되는 루아 함수는 p:main(frame)의 형태로 쓸 수 없습니다. 무조건 p.main(frame)으로 써야합니다.