请参阅下面我对记录定义的尝试。 Erlang编译器不将key
字段定义视为有效语法。
有没有办法完成类似的事情,没有创建关键记录或只是像key :: tuple()
这样的未定义的元组结构?
-record(spot, {
key :: {id :: integer(), version:: integer(), live :: boolean()},
name :: binary(),
short_description :: binary(),
address1 :: binary(),
address2 :: binary(),
address3 :: binary(),
postalcode :: binary(),
city :: binary(),
phone :: binary(),
website_url :: binary(),
menu_url :: binary(),
last_modified_at :: erlang:timestamp()}).
答案 0 :(得分:5)
{id :: integer(), version:: integer(), live :: boolean()}
不是有效的类型规范。您可以使用记录定义,也可以只指定{integer(), integer(), boolean()}
的类型信息。
所以使用记录看起来像。
-record(spot_key, {
id :: integer(),
version:: integer(),
live :: boolean()
}).
-record(spot, {
key :: #spot_key{},
name :: binary(),
short_description :: binary(),
address1 :: binary(),
address2 :: binary(),
address3 :: binary(),
postalcode :: binary(),
city :: binary(),
phone :: binary(),
website_url :: binary(),
menu_url :: binary(),
last_modified_at :: erlang:timestamp()
}).
答案 1 :(得分:3)
如果您不想为密钥创建记录,则不能在密钥元组中使用字段名称。 如果你删除那些字段名称,我相信编译器可以吃它。
我的意思是尝试而不是
-record(spot, {
key :: {id :: integer(), version:: integer(), live :: boolean()},
name :: binary(),
写
-record(spot, {
key :: {integer(), integer(), boolean()},
name :: binary(),