return 值模式错误

Wrong return value pattern

社区!

我是 Elixir 的新手,遇到了一个问题。 我正在 Phoenix 上制作 API 并坚持一种模式:

我的控制器请求域:

with {:ok, some_data} <- Organisation.create(...) do

end

该域依次请求某些服务:

with {:ok, service_data} when length(service_data) == 0 <- SomeService.get(...) do
    {:ok, [1, 2, 3]} # Some other LIST data
end

因此,如果 when length(service_data) == 0 变为 True,则服务将 return {:ok, [1, 2, 3]},但如果 False,则服务将 return {:ok, service_data} - 这是不可接受的!

遇到这种情况怎么办?有没有最佳实践。

P.S。使用 case 过滤 return 不是一种选择,因为两个 return 都是 {:ok, []}.

P.S. Filtering returns using case is not an option, since both returns are {:ok, []}.

不确定你的意思,但这确实适合 case 列表模式:

case SomeService.get(...) do
  {:ok, []} -> {:ok, [1, 2, 3]}
  {:ok, _} -> {:error, "not an empty list"}
  error -> error
end

第一个子句匹配空列表,所以第二个子句匹配非空列表。如果两者都不匹配,我们 return 我们得到的值。