【发布时间】:2010-10-22 22:40:20
【问题描述】:
我遇到了一个很容易解决的问题。在this 之后,我正在尝试访问记录中的一个字段。这是一个展示我的问题的简化示例:
-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) ->
[].
当我尝试编译测试时,出现语法错误:
./test.erl:12: syntax error before: Field
我做错了什么?
【问题讨论】:
-
问题是您试图将运行时问题打包到编译时。这意味着您正在尝试在程序编译期间用其实际值 [在程序执行期间可用] 评估和替换 Field 。通常,问题是通过预处理或元编程来解决的。不幸的是,我不知道 Erlang 的最佳方法是什么。