|
1 | | -Vector = (function (class, meta, prototype) |
| 1 | +Vector = (function (class) |
| 2 | + local meta = { |
| 3 | + __add = function(self, v) |
| 4 | + return class.new(self.i + v.i, self.j + v.j) |
| 5 | + end, |
| 6 | + __mul = function(self, v) |
| 7 | + return self.i * v.i + self.j * v.j |
| 8 | + end, |
| 9 | + __tostring = function(self) |
| 10 | + return string.format("<%g,%g>", self.i, self.j) |
| 11 | + end, |
| 12 | + __index = { |
| 13 | + magnitude = function(self) |
| 14 | + return math.sqrt(self.i * self.i + self.j * self.j) |
| 15 | + end |
| 16 | + }, |
| 17 | + } |
| 18 | + |
2 | 19 | class.new = function (i, j) |
3 | 20 | return setmetatable({i = i, j = j}, meta) |
4 | 21 | end |
5 | 22 |
|
6 | | - prototype.magnitude = function (self) |
7 | | - return math.sqrt(self.i * self.i + self.j * self.j) |
8 | | - end |
9 | | - |
10 | | - meta.__index = prototype |
11 | | - |
12 | | - meta.__add = function (self, v) |
13 | | - return class.new(self.i + v.i, self.j + v.j) |
14 | | - end |
15 | | - |
16 | | - meta.__mul = function (self, v) |
17 | | - return self.i * v.i + self.j * v.j |
18 | | - end |
19 | | - |
20 | | - meta.__tostring = function (self) |
21 | | - return string.format('<%g,%g>', self.i, self.j) |
22 | | - end |
23 | | - |
24 | 23 | return class |
25 | | -end)({}, {}, {}) |
| 24 | +end)({}) |
26 | 25 |
|
27 | 26 | u = Vector.new(3, 4) |
28 | 27 | v = Vector.new(-5, 10) |
29 | 28 | assert(tostring(u) == "<3,4>") |
30 | 29 | assert(tostring(v) == "<-5,10>") |
| 30 | +assert(u.i == 3) |
31 | 31 | assert(u.j == 4) |
32 | 32 | assert(u:magnitude() == 5.0) |
33 | 33 | assert(tostring(u + v) == "<-2,14>") |
|
0 commit comments