Lua 객체 지향
4565 단어 lua
1) 봉인: 하나의 실체의 정보, 기능, 응답을 하나의 단독 대상에 불러올 수 있는 특성을 말한다.
2) 상속: 상속의 방법은 원래 프로그램을 바꾸지 않는 토대에서 이를 확충하여 원래 기능을 보존하고 새로운 기능도 확장할 수 있도록 한다.이것은 중복 인코딩을 줄이고 소프트웨어의 개발 효율을 높이는 데 유리하다.
3) 다태: 같은 조작이 서로 다른 대상에 작용하여 서로 다른 해석을 하고 서로 다른 집행 결과를 낼 수 있다.실행할 때, 기본 클래스를 가리키는 지침을 통해 파생 클래스를 실현하는 방법을 호출할 수 있다.
4) 추상: 추상(Abstraction)은 복잡한 현실 문제를 간소화하는 경로로 구체적인 문제에 대해 가장 적절한 클래스 정의를 찾을 수 있고 가장 적절한 계승 단계에서 문제를 해석할 수 있다.
Lua에서 객체 지향
우리는 대상이 속성과 방법으로 구성되어 있다는 것을 안다.LUA의 가장 기본적인 구조는 테이블이기 때문에 테이블로 대상의 속성을 설명해야 한다.lua의function는 방법을 나타낼 수 있습니다.그러면 LUA의 클래스는 table + function을 통해 시뮬레이션할 수 있습니다.계승에 관해서는metetable를 통해 시뮬레이션할 수 있다(추천하지 않고 가장 기본적인 대상의 대부분 시간만 시뮬레이션하면 충분하다).
Lua의 표는 어떤 의미에서 대상일 뿐만 아니라대상과 마찬가지로 표에도 상태(구성원 변수)가 있다.대상의 값과 독립된 본성도 있다. 특히 두 개의 서로 다른 값을 가진 대상(table)은 두 개의 서로 다른 대상을 대표한다.하나의 대상은 서로 다른 때에도 서로 다른 값을 가질 수 있지만 그는 시종일관 하나의 대상이다.객체와 마찬가지로 테이블의 라이프 사이클은 작성된 항목, 작성된 항목과 관계가 없습니다.객체에는 다음과 같은 구성원 함수가 있습니다.
Account = {balance = 0}
function Account.withdraw (v)
Account.balance = Account.balance - v
end
이 정의는 Account 객체의 withdraw 도메인에 저장된 새 함수를 만듭니다. 다음과 같이 호출할 수 있습니다.
Account.withdraw(100.00)
간단한 실례
다음 간단한 클래스는 세 가지 속성을 포함합니다:area,length,breadth,printArea 방법은 계산 결과를 인쇄하는 데 사용됩니다.
-- Meta class
Rectangle = {area = 0, length = 0, breadth = 0}
-- new
function Rectangle:new (o,length,breadth)
o = o or {}
setmetatable(o, self)
self.__index = self
self.length = length or 0
self.breadth = breadth or 0
self.area = length*breadth;
return o
end
-- printArea
function Rectangle:printArea ()
print(" ",self.area)
end
객체 작성
창설 대상은 클래스의 실례에 메모리를 분배하는 과정입니다.모든 종류는 자신의 메모리를 가지고 공공 데이터를 공유한다.
r = Rectangle:new(nil,10,20)
액세스 속성
우리는 점호를 사용할 수 있다(.)클래스의 속성에 액세스하려면 다음과 같이 하십시오.
print(r.length)
구성원 액세스
콜론: 을 사용하여 클래스의 구성원 함수에 액세스할 수 있습니다.
r:printArea()
객체 초기화 시 할당이 존재합니다.
전체 인스턴스
-- Meta class
Shape = {area = 0}
-- new
function Shape:new (o,side)
o = o or {}
setmetatable(o, self)
self.__index = self
side = side or 0
self.area = side*side;
return o
end
-- printArea
function Shape:printArea ()
print(" ",self.area)
end
--
myshape = Shape:new(nil,10)
myshape:printArea()
다음 절차에 따라 출력 결과는 다음과 같습니다.
100
Lua 상속
상속은 한 대상이 다른 대상을 직접 사용하는 속성과 방법을 가리킨다.기본 클래스를 확장하는 속성과 방법에 사용할 수 있습니다.다음은 간단한 상속 인스턴스를 보여 줍니다.
-- Meta class
Shape = {area = 0}
-- new
function Shape:new (o,side)
o = o or {}
setmetatable(o, self)
self.__index = self
side = side or 0
self.area = side*side;
return o
end
-- printArea
function Shape:printArea ()
print(" ",self.area)
end
다음 예제에서는 Square 객체가 Shape 클래스를 상속합니다.
Square = Shape:new()
-- Derived class method new
function Square:new (o,side)
o = o or Shape:new(o,side)
setmetatable(o, self)
self.__index = self
return o
end
전체 인스턴스
다음 예제에서는 간단한 클래스를 상속하여 파생 클래스를 확장하는 방법을 설명합니다. 파생 클래스에는 계승 클래스의 구성원 변수와 방법이 보존되어 있습니다.
-- Meta class
Shape = {area = 0}
-- new
function Shape:new (o,side)
o = o or {}
setmetatable(o, self)
self.__index = self
side = side or 0
self.area = side*side;
return o
end
-- printArea
function Shape:printArea ()
print(" ",self.area)
end
--
myshape = Shape:new(nil,10)
myshape:printArea()
Square = Shape:new()
-- new
function Square:new (o,side)
o = o or Shape:new(o,side)
setmetatable(o, self)
self.__index = self
return o
end
-- printArea
function Square:printArea ()
print(" ",self.area)
end
--
mysquare = Square:new(nil,10)
mysquare:printArea()
Rectangle = Shape:new()
-- new
function Rectangle:new (o,length,breadth)
o = o or Shape:new(o)
setmetatable(o, self)
self.__index = self
self.area = length * breadth
return o
end
-- printArea
function Rectangle:printArea ()
print(" ",self.area)
end
--
myrectangle = Rectangle:new(nil,10,20)
myrectangle:printArea()
다음 코드를 실행하여 출력 결과는 다음과 같습니다.
100
100
200
함수 재작성
Lua에서 기본 클래스의 함수를 다시 작성하여 파생 클래스에서 자신의 실현 방식을 정의할 수 있습니다.
-- printArea
function Square:printArea ()
print(" ",self.area)
end
:
https://www.yuque.com/docs/share/9f5f986c-17a2-40ad-bf7a-372705268ae4
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Neovim을 위한 자동 완성NeoVim으로 생산성을 높일 수 있는 가장 멋진 기능 중 하나는 자동 완성이므로 성능에 따라 플러그인을 선택할 수 있습니다. YouCompleteMe Coc.nvim 이 플러그인은 사용하기 좋지만 Javascrip...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.