1. ホーム
  2. スクリプト・コラム
  3. ルア

Luaオブジェクト指向プログラミング。基本構造表の簡単な例

2022-01-05 11:42:28

オブジェクト指向プログラミング

(オブジェクト指向プログラミング、OOP)は、非常に人気のあるコンピュータ・プログラミング・アーキテクチャです。

Luaの最も基本的な構造はtableなので、tableを使ってオブジェクトのプロパティを記述する必要があります。

Luaの関数は、メソッドを表現するために使用することができます。そして、Luaのクラスは、テーブル+関数でエミュレートすることができます。

簡単な例です。

-- Czhenya Lua Object-Oriented
-- For an object, properties methods
--[[ Two ways to define functions
person.eat = function()
  print(person.name. "in writing LUA")
end
function person.eat()
  print(person.name.. "in writing LUA")
end
--]]
-- as a prototype
Person = {name = 'Czhena',age = 22}
function Person:eat()
  print(self.name. "s age is". .self.age)
end
function Person:new(o) -- return false if o is empty
  local t = o or {}
  --[[ Same result as set below, just two different ways
  setmetatable{t,self}
  self.__index=self
  --]]
  setmetatable(t,{__index = self}) -- Set metatable
  -- call an attribute that doesn't exist in t, it looks in the table referred to by __index
  return t
end
-- similar to creating an object via a constructor
person1 = Person:new({weight = 100})
person2 = Person:new()
print(person1.name)
print(person1.weight)
print(person2.name)
person1.name = "CZY" -- does not change the meta table, add to person.name
person1:eat()
person2:eat()
--Inheritance
Student = Person:new()
Student.grade = 1
stu1 = Student:new()
stu1:eat()
print(stu1.grade)

コロンとドット定義の関数の違い。

-- Use colons and dots to define functions, and suggest what to define functions with and what to call them with
person = {name="Czhenya",age=22}
function person:eat()
  print(self.name. "s age is". .self.age)
end
person.eat(person)
a = person
--colon calls self auto-assignment
a:eat()
-- When called by a dot, self is not automatically assigned a value, it must be passed as an argument
a.eat(a)

概要

以上が本記事の内容の全てです、皆様の勉強やお仕事のために本記事の内容が一定の参考学習価値を持つことを願っています、BinaryDevelopをよろしくお願いします。もっと詳しく知りたい方は、以下のリンク先をご確認ください。