LUA 객체용

1489 단어
    Account = { balance=0,
                withdraw = function (self, v)
                             self.balance = self.balance - v
                           end
              }
    
    function Account:deposit (v)
      self.balance = self.balance + v
    end
    
    Account.deposit(Account, 200.00)
    Account:withdraw(100.00)

위의 이 예는 우선, 계정은table입니다. 안에 두 개의 요소, 하나는 키가 balance,value는 0,하나는 키가withdraw,value는 함수입니다.
다음을 확인할 수 있습니다.
1. 함수는table에서 정의할 수 있는데 이것은 js와 매우 비슷하다.
2.self는 루아에 있는this
3. 함수를 호출하는 방법은 사용한다.
4. self를 형삼으로 생략하고 싶다면 사칭으로 이 함수를 정의하고 사용할 수 있다.
 
그리고 다음 예는 루아가 정말 OO라는 것을 설명한다.
    Account = {balance = 0}
    function Account.withdraw (v)
      Account.balance = Account.balance - v
    end
    a = Account; Account = nil
    a.withdraw(100.00)   -- ERROR!

즉, 하나의 변수가 다른 대상을 가리키면 이 대상의 원래 대상과 관련된field를 다시 호출할 수 없다. 유일한 방법은 self, 즉this로 자신의field를 자신의field로 가리키는 것이다. 듣기에 어디가 틀린 것 같다.
    function Account.withdraw (self, v)
      self.balance = self.balance - v
    end

재호출:
    a1 = Account; Account = nil
    ...
    a1.withdraw(a1, 100.00)   -- OK

오케이야.
뒤에 OO의 계승, 봉인, 실현 인터페이스가 있다. 이런 것들은 내가 관심을 가지는 것이 아니다. 왜냐하면 LUA가 OO를 실현하는 것은 내가 보기에 싱거운 것이다. 나는 그것을str처리하면 되고 뒤에 있는 것은 연구하지 않는다.

좋은 웹페이지 즐겨찾기