我正在嘗試從包含頭文件的表單編譯模塊。首先,如果我有源文件中的模塊,一切正常。使用包含的頭文件編譯表單
user.hrl
-record(user, {name :: string()}).
zed.erl
-module(zed).
-export([f/1]).
-include("user.hrl").
f(User) ->
User#user.name.
殼
1> compile:file(zed, [return]).
{ok,zed,[]}
2> rr("user.hrl").
[user]
3> zed:f(#user{name = "Zed"}).
"Zed"
如果我嘗試編譯同一模塊從表單中,我得到一個未定義的記錄錯誤。玩{i, Dir}
和其他選項沒有幫助。
殼
1> Forms = [{attribute,1,module,zed},
1> {attribute,1,export,[{f,1}]},
1> {attribute,1,include,"user.hrl"},
1> {function,1,f,1,
1> [{clause,1,
1> [{var,1,'User'}], [],
1> [{record_field,1,
1> {var,1,'User'},
1> user,
1> {atom,1,name}}]}]}].
....
2> compile:forms(Forms, [return]).
{error,[{".",[{1,erl_lint,{undefined_record,user}}]}],[]}
我在做什麼錯?
感謝。我被這個文件誤導了。所以基本上我可以1)自己獲取標題,將它們解析爲表單,並用它們替換屬性,或者2)將我的表單打印到源文件,然後編譯。 – Zed 2010-01-07 07:29:31
就是這樣。或者修復epp。 :-) – rvirding 2010-01-07 19:40:02
僅供參考,有一個模塊用於對erl_scan返回的令牌進行預處理:https://github.com/evanmiller/aleppo – Emiller 2010-12-13 22:02:53