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)
我查看了文档,没有看到任何内置函数执行此操作.
Erlang标准库包含is_record()BIF,它检查元组的第一个元素是否是适当的原子,请参阅is_record/2,以便您可以测试变量is_record(Var, custom_record).