1

在 Erlang shell 中erl,我可以使用rr(Mod)从指定模块加载记录定义。这允许我在查看 shell 中的记录时看到字段名称。

rr(Mod)Elixir shell 中的等价物是什么iex

例如,我有一个'RSAPrivateKey'Erlang 记录,但是当显示在 中时iex,我看到的只是:

{:RSAPrivateKey,
 <<48, 130, 4, 164, 2, 1, 0, 2, 130, 1, 1, 0, 181, 223, 0, 179, 206, 108, 57,
   72, 227, 146, 53, 117, 218, 232, 204, 33, 153, 161, 201, 232, 23, 145, 201,
   134, 105, 53, 164, 223, 95, 111, 64, 29, 254, 114, 146, 33, ...>>,
 :not_encrypted}
4

2 回答 2

1

您可以使用以下方式获取字段名称record_name(a_record)

iex(1)> c "user_record.ex"                  
[User]

iex(2)> import User
User

iex(3)> user1 = user()
{:user, "Meg", "25"}

iex(4)> user(user1)
[name: "Meg", age: "25"]

iex(5)> user2 = user(name: "Roger", age: 50)
{:user, "Roger", 50}

iex(6)> user(user2) 
[name: "Roger", age: 50]

user_record.ex:

defmodule User do
  require Record
  Record.defrecord :user, [name: "Meg", age: "25"]
end
于 2018-08-26T16:45:51.453 回答
0

根据 Erlang 文档:

rr(Module)
从模块的 BEAM 文件中读取记录定义。如果 BEAM 文件中没有记录定义,则定位并读取源文件。返回读取的记录定义的名称。模块是一个原子。

也就是说,如果代码已经编译为 BEAM,您可以使用它Module.record_name/0来获取信息。

如果代码还没有编译,你仍然可以从 erlang 头文件 record.hrl中提取记录信息Record.extract/2

于 2018-08-27T06:41:59.790 回答