这开始作为一个问题:

几乎每次当我用爱尔兰的外壳,我想做些命令壳启动时,例如喜欢的东西

rr("*.hrl").

或类似的。目前,我有到它每次我开始爱尔兰壳和我厌倦了它,忘记这所有的时间。

这实际上是错误的问题!为什么我其实想要做的就是读了我的记录的定义,标题中的每一个壳的工作。不用于其他的外壳内置命令运行的启动。所以我改变了这个问题标题,以显示这个问题如何,它应具有要求。

有帮助吗?

解决方案

同时,尝试解决方案。二郎我偶然发现了一个解决方案的具体rr/1的使用情况:

从人页的外壳:

有一些支持对于阅读和打印的记录的外壳。在汇编的记录表翻译成tuple快捷- 范围内.在运行时也不知道是否元组实际上代表一个 记录。也不是记录使用的定义可在编译器 运行时间。因此,为了阅读记录的语法和打印组作 记录时可能,记录的定义必须保持由 壳本身。该命令对阅读、定义、遗忘, 清单,并且打印的记录,详述如下。请注意,每个工作 有自己的一套记录的定义。促进事项的记录 定义中的模块shell_default和user_default(如果装载) 读每次新的工作就是开始。例如,增加的线路

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

到user_default使该定义的file_info容易获得 外壳。

对于澄清我添加一些例子:

文件 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}

→壳知道有关记录的从foo。该实验室

其他提示

启动shell时将评估文件.erlang,但在shell上下文中将对其进行评估。这意味着它只能包含被评估的通用表达式,而不能包含shell命令。不幸的是,rr()是一个shell命令(它会初始化本地shell数据以识别记录),因此不能在.erlang文件中使用。

虽然必须预加载的用户定义模块user_default可以包含包含使用-include-include_lib的记录定义的文件,但是这些记录定义仅对user_default中定义的功能可用。 user_default是常规的已编译模块,其中的导出函数与任何其他函数一样被调用,因此记录定义在shell中将不可见。 user_default允许用户定义更复杂的功能,这些功能可以在shell中作为shell命令来调用。

编辑:

我在这里错了一部分。尽管我对如何评估.erlang以及如何调用user_default中的函数是正确的,但是我却错过了如何在Shell启动时扫描user_default.erl来获取记录定义,然后在Shell中使用这些记录定义。感谢@Peer Stritzinger指出这一点。

将其放在主目录中名为.erlang的文件中(请参阅 http://www.erlang.org/documentation/doc-5.2/doc/getting_started/getting_started.html )。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top