pya*_*ing 1 anonymous-function elixir first-class-functions
我可以直接在交互式外壳中编写一个匿名函数,如下所示。
iex> total_bottles_milk = fn total -> total * 2 end
iex> total_bottles_milk.(2)
Run Code Online (Sandbox Code Playgroud)
但是,如果我编写一个外部文件并在交互式外壳程序中运行,它将显示“编译错误”。
我的文件名和目录路径是lib / expense.ex
下面是我的代码
defmodule Expense do
total_bread_slices = fn total -> (total * 10) / 100 end
total_bottles_milk = fn total -> total * 2 end
total_cakes = fn total -> total * 15 end
def total_expense(bread_slices, bottles_of_milk, cakes) do
total_bread_slices.(bread_slices) + total_bottles_milk.(bottles_of_milk) + total_cakes.(cakes)
end
end
Run Code Online (Sandbox Code Playgroud)
当我进入文件夹路径并运行iex -S mix以运行Expense模块时,终端显示Compilation错误。
我只是想知道我是否可以直接在交互式外壳程序中运行匿名函数,而不是从外部源进行编译。我想写我作为一等公民的职能。如果有办法,我该怎么办?
你不能在仙丹(见创建“变量”像这样EDIT 1和Edit 2下面)。您看到的错误是正常的。
您可以将匿名函数放入命名函数,然后从那里调用它们,这将给您相同的结果:
defmodule Expense do
def total_expense(bread_slices, bottles_of_milk, cakes) do
total_bread_slices().(bread_slices) + total_bottles_milk().(bottles_of_milk) + total_cakes().(cakes)
end
defp total_bread_slices, do: fn total -> (total * 10) / 100 end
defp total_bottles_milk, do: fn total -> total * 2 end
defp total_cakes, do: fn total -> total * 15 end
end
Run Code Online (Sandbox Code Playgroud)
这样,您将调用命名函数,该函数将返回匿名函数,然后将参数传递给该匿名函数。
编辑1
您不能创建类似于INSIDE模块的变量。这在iex中有效,因为它是一个交互式环境。但是,x = y语法在Elixir模块中的函数外部无效。
编辑2
感谢@Dogbert的更正。实际上,您可以在模块内部和函数外部创建变量,但不能在内部使用它们def。
| 归档时间: |
|
| 查看次数: |
144 次 |
| 最近记录: |