是否有Elixir相当于Rails`try`功能?

Mar*_*nos 8 ruby elixir

在Rails中,您可以执行以下操作:

@user.try(:contact_info).try(:phone_number)

phone_number如果@user并且contact_info都不是零,那将返回.如果其中一个为零,则表达式将返回nil.

我想知道在Elixir中最常用的方法是什么,知道@user并且contact_info结构.

NoD*_*ame 6

我认为一种方法是使用模式匹配,所以它会是这样的:

case user do
  %{contact_info: %{phone_number: phone_number}} when phone_number != nil -> 
    #do something when the phone number is present
  _ -> 
    #do something when the phone number is absent
end
Run Code Online (Sandbox Code Playgroud)


tun*_*ngd 0

可能不会,Elixir 不是面向对象的,因此您在定义的模块上调用已知函数(如果未定义函数/模块,则代码甚至无法编译)。

对于使用管道运算符连续调用函数(结果可以nil在任何步骤),我认为单个大块try就足够了。或者您可以尝试pipe_while此库中的宏https://github.com/batate/elixir-pipes