顯示具有 point 標籤的文章。 顯示所有文章
顯示具有 point 標籤的文章。 顯示所有文章

2014年10月13日 星期一

LUA Point class example 2

--
-- 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
-- ]]

2014年10月12日 星期日

lua 2d/3d point class

--
-- define Point class for LUA
--
Point = {}
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.new(...)
 local pt = {}
 args = { ... }
 if #args == 3 then
   pt.x = args[1]
   pt.y = args[2]
   pt.z = args[3]
 elseif #args == 2 then
   pt.x = args[1]
   pt.y = args[2]
 else
    error("2D or 3D only" ,2)  
 end
 setmetatable(pt,Point)
 return pt
end

--
-- Usage
--

p1 = Point.new(1,2)
p2 = Point.new(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)

-- [[ 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
: No such Point member or init:z
: No such Point member :xxx
-- ]]

食用油

豆大芥小 加熱均 又非橄㰖 造假多 油麻菜籽 螻蟻命 自求多福 身安康 目前 我推 芥花油,較耐高溫. 從成份上來看 橄㰖>芥花>大豆 . 從CP/造假上來看 又不推 高價 橄㰖了, 可能 摻其它大豆等油/加色素等, 最近新聞 數千公頓大豆 不知所踪, 合理推測, 是...