[erlang-questions] funs and code loading

Matthias Lang <>
Mon Jan 14 10:15:35 CET 2008


Hi,

I wrote this module to see how funs behave when code is reloaded:

  -module(reload).
  -export([go/0, f/0]).
  -define(VERSION, 1).
  
  go() ->
      E = fun reload:f/0, 
      F = fun() -> f() end,
      G = fun f/0,
      H = fun() -> ?VERSION end,
      spawn(fun() -> loop(E, F, G, H) end).
  
  f() ->
      ?VERSION.
  
  loop(E, F, G, H) ->
      io:fwrite("~p ~p ~p ~p\n", [E(), F(), G(), H()]),
      timer:sleep(3000),
      loop(E, F, G, H).

This is what it does on R12B-0:

   ~ >/usr/local/src/otp_src_R12B-0/bin/erl
   1> c(reload).
   {ok,reload}
   2> reload:go().
   1 1 1 1
   <0.38.0>
   3> c(reload).      % edited reload.erl to change the VERSION define to 2
   {ok,reload}
   2 2 2 1

I was expecting to see 2 1 1 1. Is there something I'm missing?

(I haven't checked whether or not (some) of the above is another facet of
http://erlang.org/pipermail/erlang-bugs/2007-June/000368.html )

Matt



More information about the erlang-questions mailing list