我有一个复杂的UILabel
用例我很好奇,如果这是最好的方法。
以下代码主要尝试将客户与现有记录进行匹配。
我需要代码在查询排列返回任何行后停止检查。
sudo chmod 775 -R storage/logs
还有更多的问题,我已经略微调整了一下。不要专注于业务逻辑,我只想清理这种情况。
答案 0 :(得分:1)
我们可以利用函数在同一模块中的事实,并修复前三个参数以使用Enum.reduce_while/3
简化此操作:
[
{:findExactNameAndDob, [dob]},
{:findExactNameAndMobile, [phone]},
{:findExactNameAndEmail, [email]},
{:findExactNameAndLocation, [address, postcode]}
]
|> Enum.reduce_while(nil, fn {func, args}, nil ->
case apply(CustomerRepo, func, [store_id, firstname, lastname] ++ args) do
[] -> {:cont, nil}
customers -> {:halt, customers}
end
end)
这应该使代码更简单,因为你说你在实际代码中有更多这样的子句。
编辑:使用Enum.find_value/2
假设成功值不是零或假(这里它总是一个列表,所以它很好),这是一种更简单的方法:
[
{:findExactNameAndDob, [dob]},
{:findExactNameAndMobile, [phone]},
{:findExactNameAndEmail, [email]},
{:findExactNameAndLocation, [address, postcode]}
]
|> Enum.find_value(fn {func, args} ->
case apply(CustomerRepo, func, [store_id, firstname, lastname] ++ args) do
[] -> false
customers -> customers
end
end)