是否可以使用¬ation编写参数化函数?
以下是Dave Thomas的Programming Elixir一书中参数化函数的一个例子
title = fn (title) -> ( fn (name) -> title <> " " <> name end ) end
mrs = title.("Mrs.")
IO.puts mrs.("Rose")
Run Code Online (Sandbox Code Playgroud)
上述计划的输出是:
Mrs. Rose
[Finished in 0.6s]
Run Code Online (Sandbox Code Playgroud)
可以title使用&符号编写吗?以下给出了符号的示例
iex> square = &(&1 * &1)
#Function<6.17052888 in :erl_eval.expr/5>
iex> square.(8)
64
Run Code Online (Sandbox Code Playgroud)
正如@Gazler正确建议的那样,由于语法限制,这是不可能的,但是您可以通过部分应用程序获得类似的结果.这里的不同之处在于title函数将直接返回结果,而不是返回函数.mrs然后,该函数可以通过"预填充"第一个参数来进行部分应用.
title = &(&1 <> " " <> &2)
mrs = &title.("Mrs.", &1)
IO.puts mrs.("Rose")
Run Code Online (Sandbox Code Playgroud)
这是不可能的.尝试在使用捕获&语法声明的函数中使用capture()函数语法将引发aCompileError
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
619 次 |
| 最近记录: |