【发布时间】:2015-02-09 19:47:37
【问题描述】:
我可以理解:
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
我不太明白的是,为什么 Elixir 允许定义 print 函数,即使未定义 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(实际上并不多)。即,我在lein repl中看到与Clojure相同的结果。
标签: elixir