我能理解这一点:为什么Elixir允许使用未定义变量的闭包?
iex(7)> outside_val = 5
5
iex(8)> print = fn() -> IO.puts(outside_val) end
#Function<20.90072148/0 in :erl_eval.expr/5>
iex(9)> print.()
5
:ok
我没有得到这么多的是,为什么是它允许药剂即使outside_val没有定义要定义的打印功能和唯一的错误出来以后?无论如何,在关闭被定义之后,没有办法传入'outside_val',所以Elixir在创建时检查变量是否更好?
我的意思是这样的:
iex(2)> print = fn() -> IO.puts(outside_val) end
#Function<20.90072148/0 in :erl_eval.expr/5>
iex(3)> outside_val = 5
5
iex(4)> print.()
** (RuntimeError) undefined function: outside_val/0
这是任何REPL中对于动态语言(例如我曾经使用过的Elixir)的常见行为(实际上并非如此)。也就是说,我在'Clojure'的'lein repl'中看到了相同的结果。 – ThanksForAllTheFish 2015-02-09 08:03:57