Tal vez quiere decir algo así como:
-module(reclist).
-export([empty_state/0, some_state/0,
add_client/1, del_client/1,
get_clients/1]).
-record(state,
{
clients = [] ::[pos_integer()],
dbname ::char()
}).
empty_state() ->
#state{}.
some_state() ->
#state{
clients = [1,2,3],
dbname = "QA"}.
del_client(Client) ->
S = some_state(),
C = S#state.clients,
S#state{clients = lists:delete(Client, C)}.
add_client(Client) ->
S = some_state(),
C = S#state.clients,
S#state{clients = [Client|C]}.
get_clients(#state{clients = C, dbname = _D}) ->
C.
prueba:
1> reclist:empty_state().
{state,[],undefined}
2> reclist:some_state().
{state,[1,2,3],"QA"}
3> reclist:add_client(4).
{state,[4,1,2,3],"QA"}
4> reclist:del_client(2).
{state,[1,3],"QA"}
::[pos_integer()]
significa que el tipo del campo es una lista de valores enteros positivos, a partir de 1
; es la sugerencia para la herramienta de análisis dialyzer
, cuando realiza verificación de tipos.
Erlang también permite que utilice la coincidencia de patrones en los registros:
5> reclist:get_clients(reclist:some_state()).
[1,2,3]
Más información:
@JUST MI OPINIÓN correcta de answer me hizo recordar que me encanta cómo Haskell trata de obtener los valores de los campos en el tipo de datos.
Aquí es una definición de tipo de datos, robado de Learn You a Haskell for Great Good!, que aprovecha la sintaxis de registro:
data Car = Car {company :: String
,model :: String
,year :: Int
} deriving (Show)
Se crea funciones company
, model
y year
, que los campos de búsqueda en el tipo de datos. Primero hacemos un nuevo coche:
ghci> Car "Toyota" "Supra" 2005
Car {company = "Toyota", model = "Supra", year = 2005}
O, usando la sintaxis de registro (el orden de los campos no importa):
ghci> Car {model = "Supra", year = 2005, company = "Toyota"}
Car {company = "Toyota", model = "Supra", year = 2005}
ghci> let supra = Car {model = "Supra", year = 2005, company = "Toyota"}
ghci> year supra
2005
Incluso podemos utilizar la coincidencia de modelos:
ghci> let (Car {company = c, model = m, year = y}) = supra
ghci> "This " ++ C++ " " ++ m ++ " was made in " ++ show y
"This Toyota Supra was made in 2005"
Recuerdo que hubo intentos de implementar algo similar a la sintaxis de registros de Haskell en Erlang, pero no estoy seguro de si tuvieron éxito.
Algunos de los puestos, con respecto a estos intentos:
Parece que LFE utiliza macros, que son similares a lo que ofrece el esquema (Racket, por ejemplo), cuando se quiere crear un nuevo valor de algún tipo de estructura:
> (define-struct car (company model year))
> (define supra (make-car "Toyota" "Supra" 2005))
> (car-model supra)
"Supra"
espero que' Tendré algo cercano a la sintaxis de registro de Haskell en el futuro, que sería realmente útil y práctico.
ewps, es 'dializador'. Más sobre Erlang [Records] (http://www.erlang.org/doc/programming_examples/records.html). –
Oh, debería haber sido 'clients = [] :: [pos_integer()],' –
¿No puedes editar tu propia publicación para actualizarla con tus 2600 puntos de crédito? – ndim