New to Lua, trying to figure out how to do OOP using the middleclass library
main.lua:
require 'middleclass'
require 'Person'
local testPerson = Person:new("Sally"); //causes Runtime error: attempt to call method 'new' (a nil value)
testPerson:speak();
Person.lua:
module(..., package.seeall)
require 'middleclass'
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
Why am I getting that error?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With