我能理解這一點:爲什麼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