return 值模式错误
Wrong return value pattern
社区!
我是 Elixir 的新手,遇到了一个问题。
我正在 Phoenix 上制作 API 并坚持一种模式:
{:ok, some_data}
成功
{:error, some_data}
出错。
我的控制器请求域:
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 我们得到的值。
社区!
我是 Elixir 的新手,遇到了一个问题。 我正在 Phoenix 上制作 API 并坚持一种模式:
{:ok, some_data}
成功{:error, some_data}
出错。
我的控制器请求域:
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 我们得到的值。