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
那会怎么样?
答案 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)