2010-08-16 11 views
6

Ok, he estado tratando de todas maneras para resolver esto.Erlang - Variables globales ... sí, lo sé, lo sé

Necesito que esta tabla sea global ... Me di cuenta de que es mucho menos eficiente pasar el TableID alrededor ... dentro del alcance de mi programa.

así que he intentado crear una nueva tabla a continuación, mirar hacia arriba:

TableID = ets:new(tb, [set,public]), 
put({tableUniqueID}, TableID), 

Luego usé:

get({tableUniqueID}) 

Y en la misma función que devuelve TableID bien ... sin embargo, cuando usarlo en otra función, devuelve un indefinido.

¿Qué ?? Pensé llegar y poner hice una llave mundial ..

también ante todo esto me di cuenta de que "podría" llamar a una función de tabla de consulta como tal:

ets:lookup(get({tableUniqueID}), msgIn) 

Lo mismo, en función de las obras, de fuera no lo hace problema .. llegar a poner ..

Entonces me di cuenta de otra manera para buscar una mesa estaría llamando el átomo de la tabla

ets:lookup(tb, msgIn) 

Pero esto nunca funciona, no dentro de la función, no fuera ..

Así que mi principal prioridad sería averiguar por qué buscar una tabla por su átomo no es posible. Pero dice que está más en todas partes, incluido el manual.

El get/put que podría vivir sin, Siempre que pueda almacenar la tabla, busque la tabla por su identificador de átomo.

¿Alguien puede arrojar luz sobre este dilema?

Respuesta

6

I GOT IT !!

el deseo de los documentos, diría que este bajo la función de búsqueda .. Mejor aún, todo el mundo que escribe tutoriales sobre ETS, o más que los libros

La solución es

TableID = ets:new(tb, [set,public,named_table]) 

Eso es named_table la parte importante

algo de investigación a través de las páginas de manual, pero

;)

4

La respuesta correcta a su problema es no utilizar ninguna tabla global, sino pasar la información. Especialmente porque mencionas la eficiencia en tu pregunta original. Está creando un punto de congestión en su código que hará que tenga un peor rendimiento en cualquier máquina con núcleo múltiple.

La tabla ets se implementa como un proceso que todos los demás procesos deben llamar para obtener un valor.

Cuestiones relacionadas