[erlang-questions] Where is an ets guide?

Sean Hinde <>
Fri Sep 22 20:00:33 CEST 2006


On 22 Sep 2006, at 18:12, Jeff Crane wrote:

>>> ets:new(mytable,[]).
>>> 16 % that's a tid!
>>
>> Identifiers are supposed to be opaque.. just like
>> the internal
>> representation of dict, etc.
>
>  I dont know anything about dict. that doesnt help me
> understand what mytable is for.

That is the point - you don't need to know.

>
>>> ets:insert(mytable,{1,"first"}).
>>> % Nope...wtf?
>>
>> mytable isn't the Tid, and you didn't ask for a
>> named table.
>
> What are you talking about? I made a table with a name
> atom of mytable, what is that other than the table
> name?

Actually you didn't. In order to get a globally named table you have  
to provide the option named_table. This is described under that  
option in the documentation.

>
>>> MyTable2 = ets:new(mytable2,[]).
>>> 19 % that's a tid!
>>>
>>> ets:insert(MyTable2,{2,"second"}).
>>> % true? Um, I'm lost.
>>
>> How lost could you be?
>>> What's the point of the name atom?
> What's the point of the name atom?
> You didn't answer the question, of course I'm lost.
>
> Why is MyTable2 the table reference, when mytable2
> should be the correct reference? What's the point of
> mytable2 if it's not the named reference? Sheesh.

The point of the name atom is also a bit unclear to me I have to say.  
It is a bit useless unless the named table option is also given. It  
appears in some debug printouts somewhere.

MyTable2 is the reference because of what the documentation for  
ets:new/2 says in the first line:

"Creates a new table and returns a table identifier which can be used  
in subsequent operations"

To get much further in your erlang studies you must understand the  
difference between a variable and an atom (Hint: Variables start with  
upper case letters).  Your line of code has assigned the return value  
from the ets:new/2 function to the Variable MyTable2. MyTable2 holds  
the reference.

>
>> It helps to read *all* of the docs for a function.
>> There's a
>> named_table option, which lets you specify the Tid
>> as an atom:
>>
>> * named_table  If this option is present, the name
>> Name is associated
>> with the table identifier. The name can then be used
>> instead of the
>> table identifier in subsequent operations.
>
>> The docs are pretty sufficient, if you read them.
>>
>> -bob
>
> I have read them. They aren't sufficient, when you're
> not already vetted in erlang. It's too bad you are
> unable to see it.
>
> Again, someone needs to present a decent ets guide.

The ets manual is actually very good. What it is not is a beginners  
guide to Erlang. It assumes you have some basic understanding of the  
language - it is a reference after all.

Might I suggest a little more study of the language is in order at  
this point.

Sean







More information about the erlang-questions mailing list