记录中元组字段的规范

时间:2014-03-01 14:46:36

标签: erlang

请参阅下面我对记录定义的尝试。 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()}).

2 个答案:

答案 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(),