ier等于erl的“ rr”是什么?

时间:2018-08-26 09:14:02

标签: elixir iex

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

Elixir shell rr(Mod)中的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}

2 个答案:

答案 0 :(得分:0)

您可以使用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_recored.ex:

defmodule User do
  require Record
  Record.defrecord :user, [name: "Meg", age: "25"]
end

答案 1 :(得分:0)

根据Erlang文档:

  

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

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

如果代码尚未编译 ,您仍然可以使用Record.extract/2从erlang头文件 record.hrl中提取记录信息