Hi! I get this example to show what I want to do.

function testit()
    e=2
    function()
        e = e+2
        e
    end
end

testit() return anonymous function
func = testit()

Each time, we run func(), e+2.
func()
4
func()
6
func()
8
It shows that func() can keep a value of e, after testit() is evaluated.

run:

func.env
(Box(8),)

There seems to be an enviroment for this anonymous function.

We can also try
type tmptype
  func1::Function
  func2::Function
end

function testit2()
    e=2
    _func1 = function()
        e = e+2
        e
    end
    _func2 = function()
        e = e+2
        e
    end
    tmptype(_func1,_func2)
end

run:
double_func = testit2()

The value of double_func.func1.env and double_func.func2.env will be 
synchronized.

run:
double_func.func1()
It will change the value of double_func.func2.env too.

Finally, here is my question.

It is there any way to change the value of the special `e` without 
evaluating double_func.func1() or double_func.func2(), and keep double_func.
func1.env and double_func.func2.env synchronized.

Is there any way to get a reference of the special `e`,  bind it to a name 
in Main, and change the value in the Box(). It let us change `e` in func2.env 
and func1.env, without running double_func.func2()

Why this value get a Box().

Thanks!



 

Reply via email to