local generic_func = function(table, x)
return table.pos + x
end
local obj = { pos = 1}
local unrelated = { pos = "42" }
function obj:func1(x)
return self.pos + x
end
function obj.func2(object, x)
return object.pos+x
end
obj.func3 = generic_func
-- identical results, no matter how you call it
print(obj:func1(2))
print(obj.func1(obj, 2))
print(obj:func2(2))
print(obj.func2(obj, 2))
print(obj:func3(2))
print(obj.func3(obj, 2))
print(generic_func(obj, 2))
-- function from "obj" runs on unrelated table
print(obj.func1(unrelated, 2))
bG9jYWwgZ2VuZXJpY19mdW5jID0gZnVuY3Rpb24odGFibGUsIHgpCiAgICByZXR1cm4gdGFibGUucG9zICsgeAplbmQKCmxvY2FsIG9iaiA9IHsgcG9zID0gMX0KbG9jYWwgdW5yZWxhdGVkID0geyBwb3MgPSAiNDIiIH0KCmZ1bmN0aW9uIG9iajpmdW5jMSh4KQogICAgcmV0dXJuIHNlbGYucG9zICsgeAplbmQKCmZ1bmN0aW9uIG9iai5mdW5jMihvYmplY3QsIHgpCiAgICByZXR1cm4gb2JqZWN0LnBvcyt4CmVuZAoKb2JqLmZ1bmMzID0gZ2VuZXJpY19mdW5jCgotLSBpZGVudGljYWwgcmVzdWx0cywgbm8gbWF0dGVyIGhvdyB5b3UgY2FsbCBpdApwcmludChvYmo6ZnVuYzEoMikpCnByaW50KG9iai5mdW5jMShvYmosIDIpKQpwcmludChvYmo6ZnVuYzIoMikpCnByaW50KG9iai5mdW5jMihvYmosIDIpKQpwcmludChvYmo6ZnVuYzMoMikpCnByaW50KG9iai5mdW5jMyhvYmosIDIpKQpwcmludChnZW5lcmljX2Z1bmMob2JqLCAyKSkKCi0tIGZ1bmN0aW9uIGZyb20gIm9iaiIgcnVucyBvbiB1bnJlbGF0ZWQgdGFibGUKcHJpbnQob2JqLmZ1bmMxKHVucmVsYXRlZCwgMikpCg==