【问题标题】:What's the iex equivalent of erl's 'rr'?erl的'rr'的iex等价物是什么?
【发布时间】:2019-02-01 03:17:51
【问题描述】:

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

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}

【问题讨论】:

  • 我对erlang记录不太熟悉,但Record.extract和/或Record.extract_all也许?

标签: elixir elixir-iex


【解决方案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

【讨论】:

    【解决方案2】:

    根据 Erlang 文档:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 2022-11-28
      • 2014-05-08
      • 2018-07-10
      • 2023-04-10
      • 2011-01-19
      • 2010-12-07
      相关资源
      最近更新 更多