편집 요약 없음 |
편집 요약 없음 |
||
(사용자 2명의 중간 판 18개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
{{css|사용자: | {{css|사용자:하늘/노트패드|:}}__TOC__{{검색창|class= |style = width: ;max-width:100%;| | ||
type{{=}}comment | type{{=}}comment | ||
default{{=}}{{FULLPAGENAME}} | default{{=}}{{FULLPAGENAME}} | ||
6번째 줄: | 6번째 줄: | ||
preload{{=}}{{FULLPAGENAME}} | preload{{=}}{{FULLPAGENAME}} | ||
}}<includeonly><onlyinclude> | }}<includeonly><onlyinclude> | ||
{{풀기:#if:|위에 내용 입력, 이 풀기 문장은 주석입니다. 저장하면 자동으로 지워집니다.}}</div><div class="card" style=""></onlyinclude></includeonly>{{-}} | {{풀기:#if:|위에 내용 입력, 이 풀기 문장은 주석입니다. 저장하면 자동으로 지워집니다.}}</div><div class="card" style=""></onlyinclude></includeonly>{{-}}<div class="card" style=""> | ||
== 루아 '.' ':' == | |||
닷 연산자는 자기 자신을 가리키는 self를 따로 입력해야 하고 콜론 연산자는 self가 포함되어있다. | |||
</div><div class="card" style=""> | |||
== 함수 호출 대체 형태 == | |||
<syntaxhighlight lang="lua"> | |||
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({}) | |||
</syntaxhighlight> | |||
괄호 생략 가능 | |||
</div><div class="card" style=""> | |||
== 객체 == | |||
루아는 객체를 지원하지 않는 언어입니다. 그래도 테이블을 이용해서 객체 비슷하게 만들 수 있습니다. | |||
<syntaxhighlight lang="lua"> | |||
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 | |||
</syntaxhighlight><syntaxhighlight lang="lua"> | |||
asdf = nil | |||
-- 객체를 지울 때는 nil을 넣어서 값이 없다고 해주면 됩니다. | |||
</syntaxhighlight> | |||
c++ 코드는 아래와 같습니다. | |||
<syntaxhighlight lang="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; | |||
} | |||
</syntaxhighlight> | |||
이번에는 private 변수가 있는 객체입니다. | |||
<syntaxhighlight lang="lua"> | |||
---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) | |||
</syntaxhighlight> | |||
</div><div class="card" style=""> | |||
== frame == | |||
<nowiki>#invoke</nowiki> 문으로 호출되는 루아 함수는 p:main(frame)의 형태로 쓸 수 없습니다. 무조건 p.main(frame)으로 써야합니다. | |||
</div><div class="card" style=""> |
2024년 2월 6일 (화) 22:48 기준 최신판
함수 호출 대체 형태[편집 | 원본 편집]
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)