J'ai une variable:ERLANG - Pattern Matching
Data = [[<<>>,
[<<"10">>,<<"171">>],
[<<"112">>,<<"Gen20267">>],
[<<"52">>,<<"20100812-06:32:30.687">>]]
Je suis en train de match de modèle pour deux cas particuliers ..
Un monde où tout ce qui ressemble à la structure extérieure - simplement [] rien à l'intérieur va, j'ai essayé [ _ ]
mais pas aller?
La deuxième, pour un modèle spécifique à l'intérieur, comme quand je vois un < < « 10 » >> ou < < « 112 » >> ou < < « 52 » >> alors je vais prendre le côté droit qui est les données réelles dans un atome. Fondamentalement le < < "10" >> ou < < "112" >> ou < < "52" >> sont les champs, le côté droit les données.
J'ai essayé des déclarations comme [<<"10">>, _ ]
toujours pas aller
Voici le reste du code:
dataReceived(Message) ->
receive
{start} ->
ok;
[ _ ] -> %%No go
io:format("Reply 1 = ~p~n", [Message]);
[<<"10">>, _ ] -> %%No go
io:format("Reply 1 = ~p~n", [Message])
end.
Comme une note du message n'est pas envoyé comme tuple est exactement comme Data =
Quelqu'un peut-il me conduire dans la bonne direction?
Merci et bonne nuit! -B
MISE À JOUR
Ok maintenant je pense Im obtenir plus chaud, je dois tout correspondant au critère entre en jeu.
Donc, si je devais dire
Message = = [[<<>>],
[<<"10">>,<<"171">>],
[<<"112">>,<<"Gen20267">>],
[<<"52">>,<<"20100812-06:32:30.687">>]]
Et j'étais recherche d'un motif correspondant au champ < < "112" >>
Comme le 112 va toujours dire 112, mais le Gen2067 peut changer à n'importe quel moment .. ce sont les données, il sera stocké dans une variable.
loop() ->
receive
[_,[<<"112">>, Data], _] when is_list(X) -> %% Match a list inside another.
?DEBUG("Got a list ~p~n", [X]),
loop();
_Other ->
?DEBUG("I don't understand ~p~n", [_Other]),
loop()
end.
Je me sens proche im, mais pas à 100%
-B
@ user417896: Je crois que vous confondez les arguments et les messages. Voir ma réponse mise à jour. –