2014-03-01 49 views
3

請參閱我在下面的記錄定義中的嘗試。 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()}). 

回答

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() 
    }). 
3

如果您不想爲鍵創建記錄,則不能使用鍵元組中的字段名稱。 如果你刪除了那個字段名,我相信編譯器將能夠吃掉它。

我的意思是嘗試,而不是

-record(spot, { 
     key :: {id :: integer(), version:: integer(), live :: boolean()}, 
     name :: binary(), 

-record(spot, { 
     key :: {integer(), integer(), boolean()}, 
     name :: binary(),