do local tab = {1, 2, 3} function closure() for key, value in ipairs(tab) do print(key, "I can still see you") end end closure() --> 1 I can still see you --> 2 I can still see you --> 3 I can still see you end print(tab) --> nil -- tab is out of scope closure() --> 1 I can still see you --> 2 I can still see you --> 3 I can still see you -- the function can still see tab
function new_adder(number) return function(input) return input + number end end add_3 = new_adder(3) print(add_3(2)) --> prints 5
function base64.newDecoder(str) -- Decoder factory if #str ~= 64 then return nil, "string must be 64 characters long!" end local tab = {} local counter = 0 for c in str:gmatch"." do tab[string.byte(c)] = counter counter = counter + 1 end return function(str) local result = "" for abcd in str:gmatch"..?.?.?" do local a, b, c, d = string.byte(abcd,1,-1) a, b, c, d = tab[a], tab[b] or 0, tab[c] or 0, tab[d] or 0 result = result .. ( string.char( ((a<<2)+(b>>4))%256 ) .. string.char( ((b<<4)+(c>>2))%256 ) .. string.char( ((c<<6)+d)%256 ) ) end return result end end