Lua面向对象利用metamethod重载运算符
生活随笔
收集整理的這篇文章主要介紹了
Lua面向对象利用metamethod重载运算符
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
##利用Point作為例子
local math = require("math") local Point = {x = 0, y = 0} Point.__index = Point function Point.new(x, y)local self = setmetatable({}, Point)if (type(x) == "table") thenfor k, v in pairs(x) doself[k] = vendelseif (type(x) == "number" and type(y) == "number") thenself['x'] = xself['y'] = yendreturn self end-- 兩點相加 function Point.__add(p1, p2)local p3 = Point.new({x = p1.x + p2.x, y = p1.y + p2.y})return p3 end-- 兩點相減 function Point.__sub(p1, p2)return Point.new({x = p1.x - p2.x, y = p1.y - p2.y}) end-- 兩點相乘 function Point.__mul(p1, p2)return Point.new({x = p1.x * p2.x, y = p1.y * p2.y}) end-- 兩點相除 function Point.__div(p1, p2)return Point.new({x = p1.x / p2.x, y = p1.y / p2.y}) end-- 相等 function Point.__eq(p1, p2)return p1.x == p2.x and p1.y == p2.y end-- 兩點距離 function Point:distance(p2)return math.sqrt(math.pow(self.x - p2.x, 2) + math.pow(self.y - p2.y, 2)) endfunction Point.__tostring(p1)return "x="..p1.x.." y="..p1.y endlocal p1 = Point.new() print(p1)local p2 = Point.new(1, 2) print(p2)local p3 = Point.new(p2) print(p3)local p4 = p2 + p3 print(p4)local p5 = p4 - p2 print(p5)local p6 = p4 * p5 print(p6)local p7 = p6 / p4 print(p7)print(p7 == p6)print(p7:distance(p6)) print(p7)輸出
x=0 y=0 x=1 y=2 x=1 y=2 x=2 y=4 x=1 y=2 x=2 y=8 x=1 y=2 false 6.0827625302982 x=1 y=2轉載于:https://my.oschina.net/skyhacker2/blog/324107
總結
以上是生活随笔為你收集整理的Lua面向对象利用metamethod重载运算符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS:漂亮的图标
- 下一篇: Navigation Drawer详解-