Elixir:使用 & 符号编写参数化函数
Elixir : Writing Parameterized Function using & Notation
是否可以使用 & 符号编写参数化函数?
这是 Programming 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
可以用&写吗? & 符号示例如下
iex> square = &(&1 * &1)
#Function<6.17052888 in :erl_eval.expr/5>
iex> square.(8)
64
这是不可能的。尝试在使用捕获语法声明的函数中使用捕获 (&
) 函数语法将引发 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
正如@Gazler 正确建议的那样,由于语法限制,这是不可能的,但您可以通过部分应用获得类似的结果。这里的区别在于 title
函数将直接 return 结果,而不是 returning 函数。然后 mrs
函数可以通过 "prefilling" 第一个参数进行部分应用。
title = &(&1 <> " " <> &2)
mrs = &title.("Mrs.", &1)
IO.puts mrs.("Rose")
是否可以使用 & 符号编写参数化函数?
这是 Programming 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
可以用&写吗? & 符号示例如下
iex> square = &(&1 * &1)
#Function<6.17052888 in :erl_eval.expr/5>
iex> square.(8)
64
这是不可能的。尝试在使用捕获语法声明的函数中使用捕获 (&
) 函数语法将引发 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
正如@Gazler 正确建议的那样,由于语法限制,这是不可能的,但您可以通过部分应用获得类似的结果。这里的区别在于 title
函数将直接 return 结果,而不是 returning 函数。然后 mrs
函数可以通过 "prefilling" 第一个参数进行部分应用。
title = &(&1 <> " " <> &2)
mrs = &title.("Mrs.", &1)
IO.puts mrs.("Rose")