【问题标题】:Load all erlang modules in path加载路径中的所有 erlang 模块
【发布时间】:2011-10-18 21:43:32
【问题描述】:

使用来自Easy way of loading projects with rebar dependencies 的答案,现在会自动解决依赖关系,但不会自动加载它们。

那么,如何自动加载我的 ebin 和 /deps/*/bin 路径中的所有模块?这样,在使用 Erlang shell 选项卡补全时就可以使用它们,这大大加快了我的开发过程。

我的解决方案基于 Adam Lindberg 的精彩回答https://gist.github.com/1131312 它只会自动加载项目模块,因此几乎不会延迟 erl 启动。

【问题讨论】:

    标签: module erlang erl


    【解决方案1】:

    这个 sn-p 可以解决问题:

    [code:ensure_loaded(list_to_atom(filename:rootname(filename:basename(F))))
     || P <- code:get_path(), F <- filelib:wildcard(P ++ "/*.beam")].
    

    将它作为一行放在你的~/.erlang 文件中(包括点:.),它将在启动 any Erlang shell 时执行。但请注意,它的速度非常慢!

    » time erl -noshell -s init stop
    erl -noshell -s init stop  0.11s user 0.02s system 11% cpu 1.143 total # Without
    » time erl -noshell -s init stop
    erl -noshell -s init stop  7.31s user 1.08s system 88% cpu 9.480 total # With 
    

    【讨论】:

    • Tnx,为了方便起见,我很乐意用一些前期性能进行交易。
    • 是的,在第一次按 TAB 时自动加载模块会很酷。 :-)
    【解决方案2】:

    如果您生成该进程,您将获得一个非常快速的启动。

    LP = fun() -> [code:ensure_loaded(list_to_atom(filename:rootname(filename:basename(F)))) || P <- code:get_path(), F <- filelib:wildcard(P ++ "/*.beam")] end.
    spawn(LP).
    

    在 ~/.erlang 文件中

    【讨论】:

    • @VansS 确保shell可以在按下Tab键时自动完成模块和函数名称。
    • @Adam Lindberg 对。在这个特定问题的范围内,以这种方式使用 ensure_loaded 是有意义的。
    猜你喜欢
    • 2014-12-21
    • 2016-10-09
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    相关资源
    最近更新 更多