Elixir:使用&写入参数化函数符号

时间:2015-07-20 18:07:58

标签: elixir

是否可以使用&编写参数化函数符号吗

以下是编程Elixir Dave Thomas

的书中的参数化函数示例
title = fn (title) -> ( fn (name) -> title <> " "  <> name end ) end

mrs = title.("Mrs.")
IO.puts mrs.("Rose")

以上程序的输出是:

Mrs. Rose
[Finished in 0.6s]

title可以使用&amp;符号? &amp;的示例符号如下:

iex> square = &(&1 * &1)
#Function<6.17052888 in :erl_eval.expr/5>

iex> square.(8)
64

2 个答案:

答案 0 :(得分:9)

正如@Gazler正确建议的那样,由于语法限制,这是不可能的,但您可以通过部分应用程序获得类似的结果。这里的区别是title函数将直接返回结果,而不是返回一个函数。然后,mrs函数可以通过“预填充”第一个参数来执行部分应用。

title = &(&1 <> " "  <> &2)
mrs = &title.("Mrs.", &1)
IO.puts mrs.("Rose")

答案 1 :(得分:6)

这是不可能的。尝试在使用捕获语法声明的函数中使用捕获(&)函数语法将引发CompileError

iex(1)> &(&(&1))      
** (CompileError) iex:2: nested captures via & are not allowed: &&1
    (elixir) src/elixir_fn.erl:108: :elixir_fn.do_capture/4
    (elixir) src/elixir_exp.erl:229: :elixir_exp.expand/2
    (elixir) src/elixir_exp.erl:10: :elixir_exp.expand/2