jbe@35: require "seqlua_c_example" -- defines function "printcsv" jbe@0: jbe@0: function alphabet() jbe@0: local letter = nil jbe@0: return function() jbe@0: if letter == nil then jbe@0: letter = "a" jbe@0: elseif letter == "z" then jbe@0: return nil jbe@0: else jbe@0: letter = string.char(string.byte(letter) + 1) jbe@0: end jbe@0: return letter jbe@0: end jbe@0: end jbe@0: jbe@35: t = {"a", "b", "c"} jbe@35: jbe@35: printcsv(t) jbe@0: -- prints: jbe@0: -- a,b,c jbe@0: jbe@0: printcsv(alphabet()) jbe@0: -- prints: jbe@0: -- a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z jbe@0: jbe@35: call_proxy = setmetatable({}, {__ipairs = function() return "call", alphabet() end}) jbe@35: jbe@35: printcsv(call_proxy) jbe@35: -- prints: jbe@35: -- a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z jbe@35: jbe@35: random_access_alphabet = setmetatable({}, { jbe@35: __index = function(self, i) jbe@35: if type(i) == "number" and i >= 1 and i <= 26 then jbe@35: return string.char(string.byte("a") + i - 1) jbe@35: end jbe@35: end jbe@35: }) jbe@35: jbe@35: printcsv(random_access_alphabet) jbe@35: -- prints: jbe@35: -- a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z jbe@35: jbe@35: index_proxy = setmetatable({}, { jbe@35: __ipairs = function() return "index", random_access_alphabet end jbe@35: }) jbe@35: jbe@35: printcsv(index_proxy) jbe@35: -- prints: jbe@35: -- a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z jbe@35: jbe@35: raw_proxy = setmetatable({"dummy"}, { jbe@35: __ipairs = function() return "raw", t end jbe@35: }) jbe@35: jbe@35: printcsv(raw_proxy) jbe@35: -- prints: jbe@35: -- a,b,c jbe@35: jbe@35: require "seqlua" jbe@35: jbe@35: do jbe@35: local function ipairsaux(s, i) jbe@35: i = i + 1 jbe@35: if i <= s.count then jbe@35: return i, s.entry jbe@35: end jbe@35: end jbe@35: custom_proxy = setmetatable({entry = "zebra", count=5}, { jbe@35: __ipairs = function(self) jbe@35: return ipairsaux, self, 0 jbe@35: end jbe@35: }) jbe@35: end jbe@35: jbe@35: printcsv(custom_proxy) jbe@35: -- prints: zebra,zebra,zebra,zebra,zebra jbe@35: