Lua – attempt to call method 'new' (a nil value)-Collection of common programming errors

First of all, the semicolons at the end of lines are not necessary and probably a bad habit for writing Lua code. Secondly, I changed require 'middleclass' to require 'middleclass.init' in both files and removed module(..., package.seeall). After that, the example code worked just fine on my machine with Lua 5.1.4.

main.lua

require 'Person'

local testPerson = Person:new("Sally")
testPerson:speak()

Person.lua

require 'middleclass.init'

Person = class('Person')

function Person:initialize(name)
  self.name = name
  print("INITIALIZE: " .. self.name)
end

function Person:speak()
  print('Hi, I am ' .. self.name ..'.')
end

You may be including the middleclass.lua file directly. It is not setup to work that way. The intention is to include middleclass/init.lua.

If you use the two files exactly as shown above and layout your files as shown below this will work.

./main.lua
./Person.lua
./middleclass/init.lua
./middleclass/middleclass.lua