<div class="gmail_quote">2009/2/3 Liu Yubao <span dir="ltr"><<a href="mailto:yubao.liu@gmail.com">yubao.liu@gmail.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br>
<br>
`escript a.erl` complains:<br>
escript: exception error: undefined function erl_eval:myfun/0<br>
<br>
If uncomment the second line, the script works well. It's strange<br>
I can eval "fun io:format/2." in erl shell.</blockquote><div><br>The reason you can evaluate "fun io:format/2" is that it is a reference to a function in another module (io) which means that the compiler cannot check the validity of that reference and so allows it and leaves it up to the runtime to check if it actually exists. Try evaluating "fun sune:format/2" to see what happens if module or function does not exist.<br>
<br>I don't know enough about escript to explain why you need to uncomment the -mode(compile) line, and I don't really understand why it doesn't work. I think it should.<br></div><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Another related counterintuitive thing is I can't evaluate function<br>
definition in erl shell directly.</blockquote><div><br>The shell evaluates expressions but a function definition is not an expression.<br><br>Generally speaking Erlang does not support a seemless interaction between compiled and interpreted code like most lisp and prolog systems. All functions must belong to a module and internally there are only (compiled) modules containing compiled code. To be able to define functions in the shell which are reachable from other code the shell would have to (re)compile all its function definitions each time they are changed.<br>
<br>It is not really very much of a hindrance to define functions in a module and recompile it.<br><br>Robert<br></div><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
a.erl:<br>
-----------------<br>
#!erl<br>
%-mode(compile).<br>
<br>
myfun() -> 2.<br>
<br>
main(_) -><br>
    io:format("~p~n", [fun myfun/0]).<br>
<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br>