在爱尔兰外壳,我怎么能自动读取我所有的记录的定义头
-
28-09-2019 - |
题
这开始作为一个问题:
几乎每次当我用爱尔兰的外壳,我想做些命令壳启动时,例如喜欢的东西
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 )。