[erlang-questions] module reloading
Fernando Benavides
elbrujohalcon@REDACTED
Wed Apr 18 03:27:02 CEST 2018
Well... You might not realize but you do know _a_ function:
your_module:module_info/0 always exists, for every module ;)
Also... Just trying to evaluate _any_ function, loads the module. That's
why instead of loading modules manually, when in the shell, I tend to write
the module name and :, press tab, if nothing pops up, I type x(). and press
enter. Either the module loads and I have autocomplete next time I press
tab, or I can't load the module.
I bet one day I'll find a module that defines x/0 and I will be in
trouble...
On Tue, 17 Apr 2018 at 19:18 Alex Alvarez <alex@REDACTED> wrote:
> Thanks Joe! LOL!!! Might sound silly, but it's very useful to be able to
> load/reload modules manually. At the very least, it'd be great to at least
> get something like {error, module_loaded}, instead of the current "error
> report" message
>
> Ok, so, why don't I just enter a <module name>:<function name> and allow
> the module to autoload. That's great for source code, but not that great
> in the command line. The problem is that I, as I suppose most folks, don't
> know the function names (or even a function name) in every module, which is
> why I tend to manually load them when I'm in Erlang's REPL. As we know,
> once a module is loaded, you can type the module name, press the <TAB> key
> and get a list of the function names + arity. This is very powerful. If
> you don't know the exact name of a function, but do know the name of a few
> modules where it might be, you can try loading them, pressing <TAB> and see
> if you can find it before having to consult the documentation.
>
> Thanks,
> Alex
>
>
> On 4/16/2018 at 9:55 AM, "Joe Armstrong" <erlang@REDACTED> wrote:
>
> I see :-)
>
> But why I ask do you do "l(math)" ?
>
> This loads or reloads a module - but modules are autoloaded on demand
> the first time the module
> is called, so really there is almost [1] no need to do ever do this.
>
> Cheers
>
> /Joe
>
> [1] there is actually but the use cases are rather obscure
>
>
>
>
> On Mon, Apr 16, 2018 at 4:24 AM, Alex Alvarez <alex@REDACTED> wrote:
> > Thanks for your reply! I can certainly understand that and appreciate the
> > system would be letting me know if I was trying to do that. But the issue
> > is that I was not trying to load any code of mine with the same module
> name,
> > I just tried reloading the same (e.g., math) module.
> >
> > Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:2:2] [ds:2:2:10]
> > [async-threads:10] [hipe] [kernel-poll:false]
> >
> > Eshell V9.3 (abort with ^G)
> > 1> l(math).
> > {module,math}
> > 2> l(math).
> > {error,sticky_directory}
> > 3>
> > =ERROR REPORT==== 15-Apr-2018::22:09:00 ===
> > Can't load module 'math' that resides in sticky dir
> >
> > As mentioned in my last email, the issue seems to be with the fact that
> the
> > module was not marked old...
> >
> > 3> code:purge(math).
> > false
> >
> > Now, I just thought that c:l() would load and reload any module
> regardless,
> > but that doesn't seem to be the case.
> >
> > http://erlang.org/doc/man/c.html#l-1
> > http://erlang.org/doc/man/code.html#purge-1
> >
> > Thanks,
> > Alex
> >
> >
> >
> > On 4/13/2018 at 4:26 PM, "Joe Armstrong" <erlang@REDACTED> wrote:
> >
> > The module called 'math' is a pre-defined system module, and
> > redefining it might have
> > unpleasant and unpredictable consequences - so you really should not
> > do this unless you
> > know exactly what you are doing. Best is to just change the name.
> >
> > If you know what you're doing you can call unstick_dir on the
> > directory where math.beam was loaded from
> > and then you will be able to change the code - again this is not a
> > good idea if you don't
> > really understand the consequences of doing this.
> >
> > System modules are 'sticky' by default to stop you from accidentally
> > shooting yourself in the foot.
> >
> > If you get this warning just change the module name.
> >
> > Cheers
> >
> > /Joe
> >
> > On Fri, Apr 13, 2018 at 7:13 PM, Alex Alvarez <alex@REDACTED> wrote:
> >> Sorry if this was already asked and I missed it... While using v20.3.2,
> >> after I load a module...
> >>
> >> 11> l(math).
> >> {module,math}
> >>
> >> ...if I try to reload it again with the same command...
> >>
> >> 12> l(math).
> >>
> >> =ERROR REPORT==== 13-Apr-2018::13:09:15 ===
> >> Can't load module 'math' that resides in sticky dir
> >> {error,sticky_directory}
> >>
> >> ...I get this error message. It's not particular to any module. From the
> >> error, there seems to be a problem with a stcky bit somewhere. Although
> I
> >> don't remember having this problem before, who knows, maybe it's just my
> >> install. Has anyone run into this issue recently?
> >>
> >> Thanks,
> >> Alex
> >>
> >> _______________________________________________
> >> erlang-questions mailing list
> >> erlang-questions@REDACTED
> >> http://erlang.org/mailman/listinfo/erlang-questions
> >>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
--
elbrujohalcon @ iPhone
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20180418/f05d1480/attachment.htm>
More information about the erlang-questions
mailing list