> Erlang中文手册 > eval/1 对文件里的 Erlang 表达式进行求值解析

file:eval/1

对文件里的 Erlang 表达式进行求值解析

用法:

eval(Filename) -> ok | {error, Reason}

内部实现:

-spec eval(Filename) -> ok | {error, Reason} when
      Filename :: name_all(),
      Reason :: posix() | badarg | terminated | system_limit
              | {Line :: integer(), Mod :: module(), Term :: term()}.

eval(File) ->
    eval(File, erl_eval:new_bindings()).

-spec eval(Filename, Bindings) -> ok | {error, Reason} when
      Filename :: name_all(),
      Bindings :: erl_eval:binding_struct(),
      Reason :: posix() | badarg | terminated | system_limit
              | {Line :: integer(), Mod :: module(), Term :: term()}.

eval(File, Bs) ->
    case open(File, [read]) of
	{ok, Fd} ->
	    R = eval_stream(Fd, ignore, Bs),
	    close(Fd),
	    R;
	Error ->
	    Error
    end.

从文件 Filename 里读取并求值解析以 '.'(或者是 ',' 隔开的一系列表达式) 隔开的 Erlang 表达式。真是的求值解析结果不会返回;文件里的任何表达式序列必须有其效用。返回的结果有以下:

  • ok:文件被读取并求值解析
  • {error, atom()}:打开或读取文件的时候发生了一个错误
  • {error, {Line, Mod, Term}}:解析文件里的 Erlang 表达式时发生了一个错误。可以使用 file:format_error/1 函数来获取更详细直观的错误描述
file:eval("./test/test_file_path_eval.erl").