It looks like you're new here. If you want to get involved, click one of these buttons!
When I use the function "haha()" it does not work, but just calling the variable "str" returns the proper value.
Code: (just defined one of these in main and then tried to use the "haha()" function)
TouchHandler = class()
function TouchHandler:init()
self.touches = {}
self.touchstate = {}
self.str = "stupid computer......"
end
function TouchHandler:touched(touch)
self.touches[touch.id] = touch
self.touchstate[touch.id] = touch.state
end
function TouchHandler:count()
local t = 0
for k,touch in pairs(self.touches) do
if self.touchstate[touch.id] == BEGAN or self.touchstate[touch.id] == MOVING then
t = t + 1
end
end
return t
end
function TouchHandler:haha()
return self.str
end
Comments
just using:
print(TouchHandler.str)
:works, but using:
print(TouchHandler:haha())
:doesn't
error: [string "TouchHandler = class()..."]:16: attempt to index local 'self' (a nil value)
Looks fine to me. I added your class in a blank project and then added:
It displays the correct text in the output.
That's a classical one: 99% of times when i get this error message, i have written
object.method()
instead ofobject:method()
!In order to use those class functions you first must declare an object that utilizes that class.
touchHandler = TouchHandler()
Then you can use touchHandler:haha()
@99MarioSuper - the "self" thing is really confusing, so I wrote about it here
http://coolcodea.wordpress.com/2013/06/19/index-of-posts/#more-8884
(see Class section)
@Slashin8r is right. You haven't defined an instance of the TouchHandler class but are calling the class function directly.
yup... somewhere in your init() you need to write:
and then you access the methods with
It's a common and easy mistake to make. It doesn't help that Lua's typing isn't very strong, so you can do stuff by accident that requires specific declarations in other languages.
In c#, for example, you'd never get away with calling TouchHandler.haha(), unless haha() was declared as a static method. And if you did declare haha() as static, it wouldn't compile because .str isn't static. And if you declared .str as static... well, everything would work, and .str would be shared across all instances of your class.
That's one of the things I don't like about scripting languages: when you get away from strong typing, you entirely lose the compiler's ability to smack you upside the head and tell you're being an idiot.
And trust me, I need that particular bit of assistance. I make a lot of dumb mistakes when coding, and the compiler is very busy telling me "hey stupid. You can't do that!"