사용자:하늘/메모장/루아: 두 판 사이의 차이

(테스트)
 
편집 요약 없음
 
(사용자 2명의 중간 판 30개는 보이지 않습니다)
1번째 줄: 1번째 줄:
[[분류:한자/문자|
{{css|사용자:하늘/노트패드|:}}__TOC__{{검색창|class= |style = width: ;max-width:100%;|
*]][[분류:| ]]<onlyinclude>{{한자 정보|{{{1|}}}|기본 = {{{2|}}}
type{{=}}comment
|한자 =  
default{{=}}{{FULLPAGENAME}}
|신자체 =  
buttonlabel{{=}}새 주제 추가하기
|간체자 =
hidden{{=}}yes
|정체자 =
preload{{=}}{{FULLPAGENAME}}
|뜻 =
}}<includeonly><onlyinclude>
|소리 =
{{풀기:#if:|위에 내용 입력, 이 풀기 문장은 주석입니다. 저장하면 자동으로 지워집니다.}}</div><div class="card" style=""></onlyinclude></includeonly>{{-}}<div class="card" style="">
|획수 =
|신자체 획수 =
|간체자 획수 =
|부수 =
|신자체 부수 =
|간체자 부수 =
|음독 =
|오음 =
|한음 =
|당음 =
|관용음 =
|훈독 =
|병음 =
|중고한어 =
}}</onlyinclude>
<!-- 설명 적는 위치  트리플 클릭하고 입력-->
{{한자 서체}}
<!-- 한자 유래와 서체에 대한 설명은 이곳에 -->


== 용례 ==
== 루아 '.' ':' ==
<!--* [[가격]](價格) 값, 가치, 액면가-->


=== 한자성어 ===
닷 연산자는 자기 자신을 가리키는 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 기준 최신판

루아 '.' ':'[편집 | 원본 편집]

닷 연산자는 자기 자신을 가리키는 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)으로 써야합니다.