a6116e3156
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
46 lines
820 B
Lua
46 lines
820 B
Lua
S = State()
|
|
function mk(x)
|
|
return function (y)
|
|
return x * y
|
|
end
|
|
end
|
|
f = mk(20)
|
|
S:eval([[
|
|
g, x = ...
|
|
print("x", x)
|
|
print(g(10))
|
|
]], f, 10)
|
|
|
|
function mkcounter()
|
|
local x = 0
|
|
function inc()
|
|
x = x + 1
|
|
return x
|
|
end
|
|
function dec()
|
|
x = x - 1
|
|
return x
|
|
end
|
|
return inc, dec
|
|
end
|
|
|
|
inc1, dec1 = mkcounter()
|
|
print(inc1())
|
|
print(inc1())
|
|
print(dec1())
|
|
print(inc1())
|
|
print(inc1())
|
|
-- inc1 and dec1 are closures, they share the same upvalue x.
|
|
-- However, when we copy inc1 and dec1 to S, we get two copies of x.
|
|
S:eval([[
|
|
inc2, dec2, x = ...
|
|
print("in the nested state")
|
|
print("x", x)
|
|
print("incrementing", inc2())
|
|
print("incrementing", inc2())
|
|
print("decrementing", dec2())
|
|
]], inc1, dec1, 10)
|
|
print(inc1())
|
|
|
|
S:set("h", f)
|
|
print(S:eval([[ return h(2) ]]))
|