检查变量是否是Erlang中的自定义类型?

Str*_*s3D 2 erlang types typechecking custom-type

有没有办法检查变量是否是Erlang中的自定义类型?

假设我在.hrl文件中定义了一些记录和类型:

-record(custom_record, {
    attr1 :: list(),
    attr2 :: binary(),
    attr3 :: tuple()
}).

-record(another_record, {
    attr1 :: list(),
    attr2 :: binary(),
}).

-type custom_record() :: #custom_record{}.

-type another_record() :: #another_record{}.

-type custom_records() :: custom_record() | another_record().
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来检查记录是否custom_record在我的Erlang代码中?像这样的东西会很好:

is_custom_type(CustomRecord, custom_records). %=> true
Run Code Online (Sandbox Code Playgroud)

我查看了文档,没有看到任何内置函数执行此操作.

Odo*_*rus 7

Erlang标准库包含is_record()BIF,它检查元组的第一个元素是否是适当的原子,请参阅is_record/2,以便您可以测试变量is_record(Var, custom_record).