Что в IEx эквивалентно rr в erl?

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

Что эквивалентно 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}

person Roger Lipscombe    schedule 26.08.2018    source источник
comment
Я не слишком знаком с записями Erlang, но, может быть, Record.extract и / или Record.extract_all?   -  person zwippie    schedule 26.08.2018


Ответы (2)


Вы можете получить имена полей с помощью 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
person 7stud    schedule 26.08.2018

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

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

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

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

person Aleksei Matiushkin    schedule 27.08.2018