luaオブジェクト向けがどのように実現されるか
4859 ワード
lua言語には真の意味のオブジェクト向けではなく,関数シミュレーションによるオブジェクト向けである.どうやって進化したのか見てみましょう.
1.基本的な関数
2.まずtableの遍歴について、(luaではオブジェクトが実際にtable,オブジェクト.フィールド名==table[フィールド名]であるため,tableの遍歴について述べる必要がある)pairs関数を用いる
3.元の姿は実はnewには関係なく、newとはずいぶん違うので、信じないで見てください.
4.模様を変えて、私たちはclone関数をこっそりnewという名前の関数にカプセル化して、最後の2行のコード(p=clone(People)から始まるコードを次のように置き換えます)(このステップが肝心です)を修正します.
ははは、new相手ができるかどうか.あら、本当にベストを着ているのがわかりませんね..(この文章を読んでいない限り、はは、でたらめを言って、牛たちはとっくに文章を持っています)
5.オブジェクトにパラメータ付きnew(javaのパラメータ付き構造関数、例えばnew String(「parameter」)をサポートさせ、People全体の「クラス」を書き換えたい.
ああ、パラメータを作ったら間違っています.空のポインタ、仕方がありません.ポインタを入れるしかありません.
p.sayHi() - - -->p.sayHi(p)
--結果は正しかった
- -Hi, nice to meet you from func, My name is stephen
はははは終わって負けた.
でも
p.sayHi(p)という書き方は醜いでしょう.java c++プログラマーはこんな見苦しい書き方を軽蔑します.はい、luaは私たちを美化してくれます.
p.sayHi(p) - - -> p:sayHi()
--結果は正しい
- -Hi, nice to meet you from func, My name is stephen
点(.)の代わりにコロン(:)を使用します.luaは自動的に変形し、ポイント番号の前のオブジェクトをパラメータに渡します.
例えばlilei:setGirlFriend("hanmeimei")--->lilei.setGirlFriend(lilei, "hanmeimei")
カーブが曲がり,luaでは関数でオブジェクト向けを実現した.
[原句]など、継承はどうやって実現するのか.
ははは、次のコードをデモします.
引き継ぎも終わり、、仕事を終える
1.基本的な関数
People = {}
function People.sayHi()
print("Hi, nice to meet you.")
end
People.sayHi();
People.sayHi = function()
print("Hi, nice to meet you from func")
end
People.sayHi();
--
--result:
--Hi, nice to meet you.
--Hi, nice to meet you from func
2.まずtableの遍歴について、(luaではオブジェクトが実際にtable,オブジェクト.フィールド名==table[フィールド名]であるため,tableの遍歴について述べる必要がある)pairs関数を用いる
local arr = {"one", "two", ["one"] = "xxx", ["two"] = "yyy"}
local intValue = 3
for key, val in pairs(arr) do
print("value of "..key.." is "..val)
end
-- table , “ ”
--value of 1 is one
--value of 2 is two
--value of one is xxx
--value of two is yyy
for key, val in ipairs(arr) do -- ipairs
print("value of "..key.." is "..val)
end
-- table “ ”
--value of 1 is one
--value of 2 is two
for key, val in pairs(intValue) do
print("value of "..key.." is "..val)
end
-- table pairs
-- bad argument #1 to 'pairs' (table expected, got number)
3.元の姿は実はnewには関係なく、newとはずいぶん違うので、信じないで見てください.
--
function clone(origin)
local dest = {}
for key, value in pairs(origin) do
dest[key] = value
end
return dest;
end
--
People = {}
People.sayHi = function()
print("Hi, nice to meet you from func")
end
-- ,
p = clone(People) -- , new Peopel() , lua
p.sayHi();
--result: , , 。。。
--Hi, nice to meet you from func
--Hi, nice to meet you from func
4.模様を変えて、私たちはclone関数をこっそりnewという名前の関数にカプセル化して、最後の2行のコード(p=clone(People)から始まるコードを次のように置き換えます)(このステップが肝心です)を修正します.
function People.new()
self = clone(People)
return self
end
-- ,
--p = clone(People)
-- new
p = People.new()
p.sayHi();
ははは、new相手ができるかどうか.あら、本当にベストを着ているのがわかりませんね..(この文章を読んでいない限り、はは、でたらめを言って、牛たちはとっくに文章を持っています)
5.オブジェクトにパラメータ付きnew(javaのパラメータ付き構造関数、例えばnew String(「parameter」)をサポートさせ、People全体の「クラス」を書き換えたい.
--
People = {}
People.sayHi = function(self)
print("Hi, nice to meet you from func, My name is "..self._name) -- _name
-- ,attempt to index local 'self' (a nil value)
-- p.sayHi()
end
function People.new(name)
self = clone(People)
self._name = name -- _name
return self
end
-- ,
--p = clone(People)
-- new
p = People.new("stephen")
p.sayHi();
--result:
--attempt to index local 'self' (a nil value)
ああ、パラメータを作ったら間違っています.空のポインタ、仕方がありません.ポインタを入れるしかありません.
p.sayHi() - - -->p.sayHi(p)
--結果は正しかった
- -Hi, nice to meet you from func, My name is stephen
はははは終わって負けた.
でも
p.sayHi(p)という書き方は醜いでしょう.java c++プログラマーはこんな見苦しい書き方を軽蔑します.はい、luaは私たちを美化してくれます.
p.sayHi(p) - - -> p:sayHi()
--結果は正しい
- -Hi, nice to meet you from func, My name is stephen
点(.)の代わりにコロン(:)を使用します.luaは自動的に変形し、ポイント番号の前のオブジェクトをパラメータに渡します.
例えばlilei:setGirlFriend("hanmeimei")--->lilei.setGirlFriend(lilei, "hanmeimei")
カーブが曲がり,luaでは関数でオブジェクト向けを実現した.
[原句]など、継承はどうやって実現するのか.
ははは、次のコードをデモします.
--
function clone(origin)
local dest = {}
for key, value in pairs(origin) do
dest[key] = value
end
return dest;
end
--
People = {}
People.sayHi = function(self) --
print("Hi, nice to meet you from func, My name is "..self._name) -- _name
-- ,attempt to index local 'self' (a nil value)
-- p.sayHi()
end
People.eat = function()
print("Different people eat different thing")
end
People.new = function(name)
self = clone(People)
self._name = name -- _name
return self
end
function copy(dest, tab)
for key, val in pairs(tab) do
dest[key] = val
end
end
--
Chinese = {}
Chinese.new = function(name, hukou)
self = People.new(name); --new
self._hukou = hukou
copy(self, Chinese) -- self
return self
end
Chinese.eat = function() --
print("Eat mantou")
end
Chinese.buyHouse = function()
print("Can not afford at all")
end
lisi = Chinese.new("lisi", "hebei")
print(lisi._name.." is from "..lisi._hukou) --
lisi:sayHi() --
lisi:eat() --
lisi:buyHouse() --
--result
--lisi is from hebei
--Hi, nice to meet you from func, My name is lisi
--Eat mantou
--Can not afford at all
引き継ぎも終わり、、仕事を終える