J'essaie d'utiliser un enregistrement dans une garde comme décrit ici [1]. Si j'utilise la forme courte qui y est décrit:Enregistre dans un garde
handle(Msg, State) when Msg==#msg{to=void, no=3} ->
... Je ne suis jamais un match ... Mais si j'élargissons pleinement à:
handle(Msg, State) when Msg#msg.to==void, Msg#msg.no==3 ->
... tout va bien. Comme il semble que je le fais avec la plupart des docs erlang, est-ce que je le lis mal?
Merci, --tim
[1] - http://www1.erlang.org/doc/reference_manual/records.html#id2278275
juste une supposition, mais votre première La correspondance suppose qu'il n'y a pas d'autres champs dans l'enregistrement ou que tous les autres champs sont définis sur indéfini. Si l'enregistrement msg comporte d'autres champs qui provoqueraient son échec. –
Merci Jeremy, ça doit être ça (il y a d'autres champs de valeur), je pensais qu'ils étaient sémantiquement équivalents. Merci encore ... – Tim
Juste comme une note supplémentaire, vous pourriez avoir fait cela avec la correspondance de modèle dans la signature de la fonction à la place. La correspondance a échoué car elle a effectué un test d'égalité. Vous avez peut-être été victime de la similarité visuelle de == pour l'égalité et = pour la liaison dans une correspondance de motif. –