local Shape = {}
Shape.__index = Shape
function Shape.new(line_count)
return setmetatable({line_count = line_count},
Shape)
end
function Shape:describe()
return "a shape with " .. self.line_count
.. " lines"
end
local Square = {}
Square.__index = Square
-- What Square lacks is looked up in Shape
setmetatable(Square, {__index = Shape})
function Square.new(side_length)
-- The base part is built by Shape
local square = Shape.new(4)
square.side_length = side_length
return setmetatable(square, Square)
end
local square = Square.new(5)
-- square.line_count = 4
-- square.side_length = 5
-- Square has no describe: found in Shape
local description = square:describe()
-- description = a shape with 4 lines
print("square.line_count = " .. square.line_count)
print("square.side_length = "
.. square.side_length)
print("description = " .. description)