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

30번째 줄: 30번째 줄:
루아는 객체를 지원하지 않는 언어입니다. 그래도 테이블을 이용해서 객체 비슷하게 만들 수 있습니다.
루아는 객체를 지원하지 않는 언어입니다. 그래도 테이블을 이용해서 객체 비슷하게 만들 수 있습니다.


<syntaxhighlight lang="lua"> local point = function(x, y) --class 역할을 하는 익명 함수 local obj = { -- class C++public:에 해당 x = x or 0, y = y or 0, } local private = 1 -- class C++의 private:에 해당 -- set point x, y function obj:set(X, Y) -- 위의 익명함수에서 x, y를 썼다고 이 줄에서도 x,y를 넣으면 작동이 되지 않는다. 그럼 funciont(x, y)의 x와 obj의 x를 같은 이름으로 적고 set()에서만 다른 이름으로 적자. self.x = X; self.y = Y end function obj:get() -- get table return {self.x, self.y} end function obj:print() -- print point num:num print(self.x ..':'.. self.y) end function obj:calcmean() -- calc mean of x, y self.mean = (self.x + self.y)/2 end function obj:printprivate() -- print private variable print(private) end return obj 테이블 반환 end
<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() local aaaa = point()
local asdf = point(1, 2)
 
asdf:print() -- 1:2
asdf:print() aaaa:print()
asdf.print(asdf) -- 1:2 : 연산자가 아닌 경우 자기 자신을 입력해야 합니다.
 
asdf:calcmean() -- 평균 계산
asdf:set(1, 3) asdf:print() asdf:printprivate()
print(asdf.mean) -- 평균 출력 1.5
</syntaxhighlight>
</syntaxhighlight>
</div><div class="card" style="">
</div><div class="card" style="">

2021년 12월 31일 (금) 12:24 판

사용자: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

frame

#invoke 문으로 호출되는 루아 함수는 p:main(frame)의 형태로 쓸 수 없습니다. 무조건 p.main(frame)으로 써야합니다.