Erlang是否有完整的REPL?

hm2xizp9  于 2023-05-21  发布在  Erlang
关注(0)|答案(3)|浏览(136)

有没有一种方法可以在Erlang中拥有一个完整的解释器,而不仅仅是一个“shell”。
由于它是一种动态语言,不能在解释器中定义命名函数有点令人失望。我怀疑这是因为编译单元(模块)必须显式编译才能由VM执行,但可能存在一个充当动态/可重新编译模块的REPL?

5lwkijsr

5lwkijsr1#

简短的回答是NO,它确实适合Erlang处理代码的方式。
Erlang VM仅支持编译代码。包括编译在内的代码处理单元是模块,可以加载、删除、更新和清除模块。因此,不可能像在lisp中那样混合解释和编译函数。可以扩展shell以允许在其中定义解释函数,但这些函数只能从shell解释器中调用,而不能从其他模块中调用。也可以使shell重新编译并重新加载“shell模块”,以便可以从其他模块调用其中的函数。但是这个模块实际上只存在于对erlang的调用中。
老实说,我真的不明白这一点,因为重新编译和重新加载代码总是那么快,这不是一个问题。与其说是出于方便,不如说是出于习惯。

bq3bfh9z

bq3bfh9z3#

1> F = fun () -> io:format("Hello World~n", []) end.
#Fun<erl_eval.43.3316493>
2> F().
Hello World
ok
3>

创建一个名为F的匿名函数,然后应用它。1

相关问题