-- クラスの定義 Point = {} Point.__index = Point; -- ここがミソ、その1 function Point:new(x, y) local new_instance = { x_ = x or 0, y_ = y or 0 } setmetatable(new_instance, self) -- ここがミソ、その2 return new_instance end function Point:__unm() return Point:new(- self.x_, - self.y_) end function Point:__add(other) return Point:new(self.x_ + other.x_, self.y_ + other.y_) end function Point:__sub(other) return self + (- other) end function Point:__mul(n) return Point.new(self.x_ * n, self.y_ * n) end function Point:__div(n) return Point.new(self.x_ / n, self.y_ / n) end function Point:__tostring() return "(" .. self.x_ .. ", " .. self.y_ .. ")" end function Point:set(x, y) self.x_ = x self.y_ = y end function Point:abs() return math.sqrt(self.x_ ^ 2 + self.y_ ^ 2) end function Point:distance(other) return (self - other):abs() end local p1 = Point:new() -- インスタンス作成 print("p1 = ", p1) p1:set(10, 20) print("p1 = ", p1) print("-p1 = ", -p1) print("p1:abs() = ", p1:abs()) local p2 = Point:new(3, 4) -- インスタンス作成 print("p2 = ", p2) print("p2:abs() = ", p2:abs()) print("p1 + p2 = ", p1 + p2) print("p1 - p2 = ", p1 - p2) print("p1:distance(p2) = ", p1:distance(p2)) p1:set(3, 0) p2:set(0, 4) print("p1 = ", p1) print("p2 = ", p2) print("p1:distance(p2) = ", p1:distance(p2))
実行結果。
p1 = (0, 0) p1 = (10, 20) -p1 = (-10, -20) p1:abs() = 22.360679774998 p2 = (3, 4) p2:abs() = 5 p1 + p2 = (13, 24) p1 - p2 = (7, 16) p1:distance(p2) = 17.464249196573 p1 = (3, 0) p2 = (0, 4) p1:distance(p2) = 5
う〜ん。やっぱり「Programming in Lua プログラミング言語Lua公式解説書」買うべきなのかなぁ。
Programming in Lua プログラミング言語Lua公式解説書
- 作者: Roberto Ierusalimschy,新丈径
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2009/08/28
- メディア: 大型本
- 購入: 5人 クリック: 78回
- この商品を含むブログ (18件) を見る