[erlang-questions] maps or records?

Garrett Smith <>
Mon Feb 29 19:12:21 CET 2016


On Mon, Feb 29, 2016 at 6:21 AM Benoit Chesneau <> wrote:

> Thanks all for the answers it's useful !
>
> On Fri, Feb 26, 2016 at 5:56 PM Garrett Smith <> wrote:
>
>> On Fri, Feb 26, 2016 at 10:23 AM Benoit Chesneau
>>
>>
>>> So would you se a maps instead of a record when you need to share the
>>> returned result with apps that depends on your library? Instead of making
>>> that result opaque and provide functions to access it? Which sound
>>> ridiculous sometimes, since at the end what you do is a get on a record key
>>> ... Curious what others do in that case?
>>>
>>
>> What's the nature of the data? If it's a map of keys to values, I think
>> map is a good data type. E.g. I think a database row is well represented as
>> a map, as columns/fields tend to differ based on what you're retrieving.
>>
>> Maybe a good test is the one you mentioned - if you're module is simply
>> providing a bunch of pass-throughs to peel off record fields, it wants to
>> be a map.
>>
>
>
> I was thinking to this simple example:
>
> I have a function hackney_url:parse_url() returning a record
> #hackney_url{} . This record can be used internally but also externally by
> the applications that need it. Which requires for now to include
> "hackney_lib.hrl" . The record will likely change. On the other hands I am
> not sure I like to have to import the include file to get its definition
> (or copy this definition in another file, or just use the tuple) .
>

At least historically the canonical form here is to use a record and
provide the definition in a public facing include. I'm thinking of
file:read_info as an example.

I think it's less obvious to use maps.

I'm starting to use maps for process state just to see how it feels - it's
not a major break through for me. I miss the very rudimentary type safety -
it feels a bit odd to structure typed values as maps.

I poked around corresponding Python interfaces to see what they're using
and of course typey values like parsed URLs are typically objects. Using
dicts would again be odd there.

I say keep it old school!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20160229/e09ff99e/attachment.html>


More information about the erlang-questions mailing list