Elixir Ecto:有人可以举例说明Ecto.Multi.run/5

时间:2016-11-22 16:26:33

标签: elixir ecto

docs

run(t, name, module, function, args) :: t when function: atom, args: [any]
  

run/3类似,但允许传递模块名称,功能和   参数。该函数应返回{:ok, value}{:error,   value},并且会在第一个参数之前收到更改   (预先给那些在函数调用中传递的内容)。

但我不确定如何使用它。让我们说我想要在Ecto.Multi

内部运行这个功能
def some_fun(value, other_value) do
  case value do
    nil -> {:error, other_value}
    _ -> {:ok, other_value}
  end
end

那会怎么样?

1 个答案:

答案 0 :(得分:10)

我假设您希望value成为"目前为止的更改" other_value是您在调用Multi.run/5时指定的值。在这种情况下,如果您的函数位于名为Foo的模块中:

defmodule Foo do
  def some_fun(value, other_value) do
    case value do
      nil -> {:error, other_value}
      _ -> {:ok, other_value}
    end
  end
end

然后您的Multi.run/5来电将是:

Multi.run(multi, name, Foo, :some_fun, [other_value])

相当于以下Multi.run/3来电:

Multi.run(multi, name, fn value -> Foo.some_fun(value, other_value) end)