代码之家  ›  专栏  ›  技术社区  ›  Peer Stritzinger

在Erlang shell中,如何自动读取所有记录定义头

  •  10
  • Peer Stritzinger  · 技术社区  · 15 年前

    几乎每次使用Erlang shell时,我都想在shell启动时运行一些命令,例如

    rr("*.hrl").
    

    或类似的。现在我每次启动一个Erlang shell时都要输入它,我已经厌倦了它,并且总是忘记它。

    但是 这实际上是个错误的问题!实际上我想做的是在每个shell作业中读取我的记录定义头。不用于启动时运行的其他shell内置命令。所以我改变了问题的标题,以显示问题应该如何提出。

    3 回复  |  直到 15 年前
        1
  •  15
  •   Peer Stritzinger    15 年前

    在使用.erlang尝试解决方案时,我偶然发现了一个针对特定rr/1用法的解决方案:

    在shell中有一些对读取和打印记录的支持。 在编译期间,将记录表达式转换为元组表达式- 记录。编译器使用的记录定义也不在 运行时。所以为了读取记录语法并将元组打印为 如果可能,记录定义必须由 炮弹本身。shell命令用于读取、定义、遗忘, 清单和打印记录如下所述。注意每个工作 有自己的一组记录定义。方便事项记录 模块shell_default和user_default中的定义(如果已加载) 每次启动新作业时读取。例如,添加行

      -include_lib("kernel/include/file.hrl").
    

    to user_default使文件信息的定义在

    为了澄清,我添加了一些示例:

    文件 foo.hrl :

    -record(foo, {bar, baz=5}).
    

    user_default.erl :

    -module(user_default).
    -compile(export_all).
    
    -include("foo.hrl").  % include all relevant record definition headers here
    
     %% more stuff probably ...
    

    让我们在贝壳里试一试:

    $ erl
    Erlang R13B04 (erts-5.7.5) [source] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
    
    Eshell V5.7.5  (abort with ^G)
    1> #foo{}.
    #foo{bar = undefined,baz = 5}
    

        2
  •  2
  •   rvirding    15 年前

    文件 .erlang 不是 在shell的上下文中求值。这意味着它只能包含经过计算的通用表达式,而不能包含shell命令。不幸的是 rr() 是一个shell命令(它初始化本地shell数据以识别记录),因此不能在 二郎

    而用户定义的模块 user_default -include -include_lib 用户默认值 . 用户默认值 用户默认值

    编辑:

    二郎 以及如何在 都叫我想念怎么 user_default.erl

        3
  •  0
  •   Alexey Romanov    15 年前

    将其放入名为 .erlang 在您的主目录中(参见 http://www.erlang.org/documentation/doc-5.2/doc/getting_started/getting_started.html ).