Je rencontre un problème qui devrait être stupidement facile à résoudre. Après this, j'essaie d'accéder à un champ dans un enregistrement. Voici un exemple simplifié qui présente mon problème:Erreur de syntaxe lors de l'accès à un champ dans un enregistrement
-module(test).
-export([test/0]).
-record(rec, {f1=[], f2=[], f3=[]}).
test() ->
Rec = #rec{f1=[1,2,3], f3=[4,5,6]},
Fields = record_info(fields, rec),
loop(Fields, Rec).
loop([Field|Fields], Rec) ->
[Rec#rec.Field|loop(Fields, Rec)]; %% <-- This is line 12.
loop([], _Rec) ->
[].
Lorsque je tente de compiler test, je reçois une erreur de syntaxe:
./test.erl:12: syntax error before: Field
Qu'est-ce que je fais mal?
Le problème est que vous essayez d'emballer une course préoccupation de temps dans la compilation. Cela signifie que vous essayez d'évaluer et de remplacer Field par sa valeur réelle [qui est disponible pendant l'exécution du programme] pendant la compilation du programme. Généralement, le problème est résolu par le prétraitement ou la métaprogrammation. Malheureusement, je ne sais pas quelle est la meilleure approche pour Erlang. – Damg