Вот чем отличается, или что общего у следующих конструкций: foo():something(obj), something(obj), obj.simething, obj:something, obj():something и obj:something()?
Внезапно, то, что в любой момент времени работоспособным может оказаться только что-то одно из списка. Хотя все они могут при этом делать одно и то же.
Причем узнать о том, что в данный момент работоспособно, а что нет, можно только по тому, что где-то в другом месте внезапно же перестала работать единственная работоспособная конструкция bar:something