【发布时间】:2017-04-27 21:53:28
【问题描述】:
在 Elixir 的 case 语句中,如果在 case 语句中满足特定条件,是否可以什么都不做?还是必须总是退回一些东西?
为了说明,这是我正在开发的 Phoenix 应用程序的 sn-p:
Enum.map(record_params, fn(record_id) ->
record = Repo.get!(Record, record_id)
case Repo.update(record) do
{:ok, struct} ->
# I DON'T REALLY NEED ANYTHING TO HAPPEN HERE... BUT I HAVE TO HAVE A CLAUSE TO MATCH WHEN THE UPDATE RETURNS {:ok, struct}
IO.inspect struct
{:error, changeset} ->
errors = parse_errors(changeset)
IO.inspect errors
json(conn |> put_status(400), %{status: "error", message: "There was a problem updating this record.", errors: errors})
end
end)
如果record 已更新,我需要知道是否有错误,获取有关它的信息并将其返回给客户端,因此需要case 语句......但我真的不如果记录已成功更新,则需要做任何事情 - {:ok, struct}。由于这些更新是在Enum.map() 内进行的,如果更新成功,我只希望地图继续循环通过record_ids。
目前,我只是将IO.inspect struct 置于成功条件下 - 这是无害的,但并不是真正必要的。如果可能的话,我宁愿清理我的代码。由于 Elixir 的模式匹配,我无法删除 {:ok, struct} 条件,如果我在该条件下什么都不放,我会收到错误 syntax error before: '->'。
现在我对 Elixir(以及一般的函数式编程范式)完全陌生,所以如果有更“Elixirish”的方式来处理这种情况,我很想听听。
【问题讨论】:
-
这还能用吗?您可能在这里多次致电
json。另外,当所有更新成功时,您如何处理响应? -
你是对的,这是有问题的。这个成功响应稍后会出现,在其他一些代码执行之后 - 我把它省略了,因为它看起来没有密切关系。
标签: elixir