Erlang有完整的REPL吗?

Gab*_*ier 6 erlang

有没有办法在Erlang中拥有一个完整的解释器,而不仅仅是一个"shell".

由于它是一种动态语言,无法在解释器中定义命名函数有点令人失望......我怀疑这是因为编译单元(模块)必须由VM执行才能显式编译,但可能是REPL作为动态/可重新编译模块存在吗?

小智 5

F = fun() - > io:format("Hello World~n",[])结束.

F().


rvi*_*ing 5

简短的回答是否定的,它确实适合 Erlang 处理代码的方式。

Erlang VM 仅支持编译代码。包括编译在内的代码处理单元是模块,您可以加载、删除、更新和清除模块。所以实际上不可能像在 lisp 中那样混合解释和编译函数。可以扩展 shell 以允许在其中定义解释函数,但这些函数只能从 shell 解释器内部调用,而不能从其他模块调用。还可以使 shell 重新编译并重新加载“shell 模块”,以便可以从其他模块调用其中的函数。但是这个模块只会真正存在于 erlang 的调用中。

老实说,我并没有真正看到这一点,因为重新编译和重新加载代码一直如此之快,这不是问题。与其说是方便,不如说是习惯的力量。