print("Hello World") --interpreted immediately
function dostuff() print("stuff"); end --basic function
fact = function(n) --all functions are function pointers in the global namespace
if n == 0 then
return 1
else
return n * fact(n-1)
end
end
print(fact(3)) --interpreted, so we can call whenever we want
a = {} -- here's an object
a.memberfunction = function() print("stuff") end; --now it has a member function
b = a -- objects are pointers/references like in java, these are two references to the same object
a[3] = "HI" -- objects/arrays/hashtables are one and the same
a["memberfunction"]() --calls the function
a.memberfunction() --also calls the function
print(a[3])
print(a[3].."WORLD") --concatenation is different than other languages, but simple
--c = a + b --error since objects/tables can't be added
metatable = {}
setmetatable(a, metatable ) --now a has a new metatable, used for operator overloading
metatable.__add = function(left, right) print("ADDITION") return left end --now we have an add operator
c = a + b --so now a can be added to things
print(a)
metatable.__tostring = function() return "A" end --now tostring will be more than the address
print(a)
cHJpbnQoIkhlbGxvIFdvcmxkIikgIC0taW50ZXJwcmV0ZWQgaW1tZWRpYXRlbHkKCmZ1bmN0aW9uIGRvc3R1ZmYoKSBwcmludCgic3R1ZmYiKTsgZW5kIC0tYmFzaWMgZnVuY3Rpb24KCmZhY3QgPSBmdW5jdGlvbihuKSAgLS1hbGwgZnVuY3Rpb25zIGFyZSBmdW5jdGlvbiBwb2ludGVycyBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZQogICAgaWYgbiA9PSAwIHRoZW4KICAgICAgICByZXR1cm4gMQogICAgZWxzZQogICAgICAgIHJldHVybiBuICogZmFjdChuLTEpCiAgICBlbmQKZW5kCnByaW50KGZhY3QoMykpICAtLWludGVycHJldGVkLCBzbyB3ZSBjYW4gY2FsbCB3aGVuZXZlciB3ZSB3YW50CgphID0ge30gICAgIC0tIGhlcmUncyBhbiBvYmplY3QKYS5tZW1iZXJmdW5jdGlvbiA9IGZ1bmN0aW9uKCkgcHJpbnQoInN0dWZmIikgZW5kOyAgLS1ub3cgaXQgaGFzIGEgbWVtYmVyIGZ1bmN0aW9uCmIgPSBhIC0tIG9iamVjdHMgYXJlIHBvaW50ZXJzL3JlZmVyZW5jZXMgbGlrZSBpbiBqYXZhLCB0aGVzZSBhcmUgdHdvIHJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgb2JqZWN0CmFbM10gPSAiSEkiIC0tIG9iamVjdHMvYXJyYXlzL2hhc2h0YWJsZXMgYXJlIG9uZSBhbmQgdGhlIHNhbWUKYVsibWVtYmVyZnVuY3Rpb24iXSgpIC0tY2FsbHMgdGhlIGZ1bmN0aW9uCmEubWVtYmVyZnVuY3Rpb24oKSAtLWFsc28gY2FsbHMgdGhlIGZ1bmN0aW9uCnByaW50KGFbM10pCnByaW50KGFbM10uLiJXT1JMRCIpIC0tY29uY2F0ZW5hdGlvbiBpcyBkaWZmZXJlbnQgdGhhbiBvdGhlciBsYW5ndWFnZXMsIGJ1dCBzaW1wbGUKCi0tYyA9IGEgKyBiIC0tZXJyb3Igc2luY2Ugb2JqZWN0cy90YWJsZXMgY2FuJ3QgYmUgYWRkZWQKbWV0YXRhYmxlID0ge30Kc2V0bWV0YXRhYmxlKGEsIG1ldGF0YWJsZSApIC0tbm93IGEgaGFzIGEgbmV3IG1ldGF0YWJsZSwgdXNlZCBmb3Igb3BlcmF0b3Igb3ZlcmxvYWRpbmcKbWV0YXRhYmxlLl9fYWRkID0gZnVuY3Rpb24obGVmdCwgcmlnaHQpIHByaW50KCJBRERJVElPTiIpIHJldHVybiBsZWZ0IGVuZCAtLW5vdyB3ZSBoYXZlIGFuIGFkZCBvcGVyYXRvcgpjID0gYSArIGIgLS1zbyBub3cgYSBjYW4gYmUgYWRkZWQgdG8gdGhpbmdzCnByaW50KGEpCm1ldGF0YWJsZS5fX3Rvc3RyaW5nID0gZnVuY3Rpb24oKSByZXR1cm4gIkEiIGVuZCAtLW5vdyB0b3N0cmluZyB3aWxsIGJlIG1vcmUgdGhhbiB0aGUgYWRkcmVzcwpwcmludChhKQoKCgoK