是否可以使用&表示法编写参数化函数?

这是Dave Thomas的《 Programming Elixir》书中的参数化函数示例

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

最佳答案

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

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

08-05 09:03