Что такое iex-эквивалент erl 'rr'? - PullRequest
0 голосов
/ 26 августа 2018

В оболочке Erlang, erl, я могу использовать rr(Mod) для загрузки определений записей из указанного модуля.Это позволяет мне видеть имена полей при просмотре записи в оболочке.

Что эквивалентно rr(Mod) в оболочке Elixir, 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 голосов
/ 27 августа 2018

Согласно документам Erlang:

rr(Module)
Считывает определения записей из файла BEAM модуля.Если в файле BEAM нет определений записей, исходный файл находится и читается вместо него.Возвращает имена прочитанных определений записей.Модуль является атомом.

Тем не менее, если код уже скомпилирован в BEAM, вы можете использовать Module.record_name/0 для получения информации.

Есликод еще не скомпилирован , вы все равно можете извлечь информацию о записи из файла заголовка erlang record.hrl с помощью Record.extract/2.

0 голосов
/ 26 августа 2018

Имена полей можно получить с помощью 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
...