votan already explained it, but I'll give an example:
lua Code:
str = "HELLO"
string.lower(str) -- uses lower's parent class string and applies the function to our argument str. GOOD
str:lower() -- passes str to lower and lower assumes str is a string. GOOD
str.lower() -- str does not have any functions and this will fail. BAD