rev |
line source |
jbe@35
|
1 require "seqlua_c_example" -- defines function "printcsv"
|
jbe@0
|
2
|
jbe@0
|
3 function alphabet()
|
jbe@0
|
4 local letter = nil
|
jbe@0
|
5 return function()
|
jbe@0
|
6 if letter == nil then
|
jbe@0
|
7 letter = "a"
|
jbe@0
|
8 elseif letter == "z" then
|
jbe@0
|
9 return nil
|
jbe@0
|
10 else
|
jbe@0
|
11 letter = string.char(string.byte(letter) + 1)
|
jbe@0
|
12 end
|
jbe@0
|
13 return letter
|
jbe@0
|
14 end
|
jbe@0
|
15 end
|
jbe@0
|
16
|
jbe@35
|
17 t = {"a", "b", "c"}
|
jbe@35
|
18
|
jbe@35
|
19 printcsv(t)
|
jbe@0
|
20 -- prints:
|
jbe@0
|
21 -- a,b,c
|
jbe@0
|
22
|
jbe@0
|
23 printcsv(alphabet())
|
jbe@0
|
24 -- prints:
|
jbe@0
|
25 -- 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
|
26
|
jbe@35
|
27 call_proxy = setmetatable({}, {__ipairs = function() return "call", alphabet() end})
|
jbe@35
|
28
|
jbe@35
|
29 printcsv(call_proxy)
|
jbe@35
|
30 -- prints:
|
jbe@35
|
31 -- 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
|
32
|
jbe@35
|
33 random_access_alphabet = setmetatable({}, {
|
jbe@35
|
34 __index = function(self, i)
|
jbe@35
|
35 if type(i) == "number" and i >= 1 and i <= 26 then
|
jbe@35
|
36 return string.char(string.byte("a") + i - 1)
|
jbe@35
|
37 end
|
jbe@35
|
38 end
|
jbe@35
|
39 })
|
jbe@35
|
40
|
jbe@35
|
41 printcsv(random_access_alphabet)
|
jbe@35
|
42 -- prints:
|
jbe@35
|
43 -- 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
|
44
|
jbe@35
|
45 index_proxy = setmetatable({}, {
|
jbe@35
|
46 __ipairs = function() return "index", random_access_alphabet end
|
jbe@35
|
47 })
|
jbe@35
|
48
|
jbe@35
|
49 printcsv(index_proxy)
|
jbe@35
|
50 -- prints:
|
jbe@35
|
51 -- 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
|
52
|
jbe@35
|
53 raw_proxy = setmetatable({"dummy"}, {
|
jbe@35
|
54 __ipairs = function() return "raw", t end
|
jbe@35
|
55 })
|
jbe@35
|
56
|
jbe@35
|
57 printcsv(raw_proxy)
|
jbe@35
|
58 -- prints:
|
jbe@35
|
59 -- a,b,c
|
jbe@35
|
60
|
jbe@35
|
61 require "seqlua"
|
jbe@35
|
62
|
jbe@35
|
63 do
|
jbe@35
|
64 local function ipairsaux(s, i)
|
jbe@35
|
65 i = i + 1
|
jbe@35
|
66 if i <= s.count then
|
jbe@35
|
67 return i, s.entry
|
jbe@35
|
68 end
|
jbe@35
|
69 end
|
jbe@35
|
70 custom_proxy = setmetatable({entry = "zebra", count=5}, {
|
jbe@35
|
71 __ipairs = function(self)
|
jbe@35
|
72 return ipairsaux, self, 0
|
jbe@35
|
73 end
|
jbe@35
|
74 })
|
jbe@35
|
75 end
|
jbe@35
|
76
|
jbe@35
|
77 printcsv(custom_proxy)
|
jbe@35
|
78 -- prints: zebra,zebra,zebra,zebra,zebra
|
jbe@35
|
79
|