--
-- refine Point class for LUA
--
function class()
local cls = {}
cls.__index = cls
return setmetatable(cls,
{ __call = function (c, ...)
instance = setmetatable({}, cls)
if cls.__init then
cls.__init(instance, ...)
end
return instance
end
}
)
end
Point = class()
Point.key_list = {"x","y","z"}
function Point.__index(t,key)
error("No such Point member or init:"..key ,2)
end
function Point.__newindex(t,key,value)
for i = 1,#Point.key_list do
if key == Point.key_list[i] then
-- t[key] = value
rawset(t,key,value)
return
end
end
error("No such Point member :"..key ,2)
end
function Point:__init(...)
args = { ... }
if #args == 3 then
self.x = args[1]
self.y = args[2]
self.z = args[3]
elseif #args == 2 then
self.x = args[1]
self.y = args[2]
else
error("2D or 3D only" ,2)
end
end
function Point:__tostring()
local out = ""..self.x..","..self.y
local zz = rawget(self,"z")
if zz ~= nil then
out=out..","..self.z
end
return out
end
--
-- Usage
--
p1 = Point(1,2)
p2 = Point(3,4)
p1.x = 8
x1,y1=p1.x,p1.y
print(string.format("x1,y1=%d,%d",x1,y1))
-- p2 = p1
print(string.format("x2,y2=%d,%d",p2.x,p2.y))
--
local points = {p1,p2}
print("points[1].x=" .. points[1].x)
print("points[2].y=" .. points[2].y)
print("p1="..tostring(p1))
--print("p1="..p1)
p3 = Point(4,5,6)
print("p3="..tostring(p3))
--[[ below is two error test
print("p1.z="..p1.z) -- : No such Point member or init:z
p1.xxx = 567 -- : No such Point member :xxx
-- ]]
--
--[[ output
--
x1,y1=8,2
x2,y2=3,4
points[1].x=8
points[2].y=4
p1=8,2
p3=4,5,6
: No such Point member or init:z
: No such Point member :xxx
-- ]]
訂閱:
張貼留言 (Atom)
車 和 東 , 兩個 不喜歡的 簡體字 寫法
车 是 草書 形變, 很難 和 小孩 解釋 為什麼 長這樣(反正你就背), 反而 車 就 很形象. 东 是 草書 形變, 很難 和 小孩 解釋 為什麼 長這樣( 反正你就背), (古人觀察到 日出東方, 東 是 木頭 加 日 , 那個方向 是 東.
-
在 ~/.bash_rc 內加入以下 function 即可在新開的 terminal 中, 用 .. N 快速切換到祖先目錄. FYI: cd - 可以來回切換前後目錄. toN() # toN num default { test ${1} || retur...
-
### Installing Python 3.8 on Ubuntu 18.04 from Source ### $ sudo apt update $ sudo apt install build-essential zlib1g-dev libncurses5-dev li...
-
台灣 2025年 前3季行人 死亡數 比去年同期 增4% . 為宣傳政蹟, 搏版面, 過度強調 行人帝王條款 , 不知 很多人 都只聽 權利 , 而 忽略 馬路如虎口 , 身體是自己的 , 不要以身犯險 .
沒有留言:
張貼留言