首页 > 解决方案 > 灵药尝试救援

问题描述

我不确定如何最好地做到这一点:

我有一个查找 IP 并返回其所在国家/地区的函数。

country = Geolix.lookup(remote_ip).country.registered_country.name

有时它会失败,在这种情况下,没有定义任何数组键。

在其他语言中,我可能会执行以下操作:

try do
  country = Geolix.lookup(remote_ip).country.registered_country.name
rescue
  country = nil
end

我真的很难让语法正确。这也感觉不是很“干净”;有没有更好的办法?

标签: elixirphoenix-framework

解决方案


您还可以使用case ... do模式匹配,如果结果case具有您需要的所有键,则它与您提取名称的第一个键匹配,如果不是,则意味着您从中获得的任何内容Geolix.lookup/1都不符合您想要的模式并且您返回零

country = 
       case Geolix.lookup(remote_ip) do
          %{country: %{registered_country: %{name: name}}} -> name
          _ -> nil
       end

推荐阅读