我如何在elixir函数中使用匹配的参数

Joe*_*son 5 elixir pattern-matching

假设我有一个函数的两个用例.对具有订阅的用户和具有订阅的用户执行某些操作.

def add_subscription(subscription_id, %User{subscription: nil})
  # Do something with user here.
Run Code Online (Sandbox Code Playgroud)

def add_subscription(subscription_id, user)
Run Code Online (Sandbox Code Playgroud)

我如何进行这样的模式匹配,还是在第一个函数中使用用户?

谢谢!

Gaz*_*ler 11

您可以将函数参数绑定到变量:

def add_subscription(subscription_id, %User{subscription: nil} = user)
Run Code Online (Sandbox Code Playgroud)

惯例是在模式匹配后分配:

# Do This
def foo(%User{subscription: nil} = user)

# Instead of this
def foo(user = %User{subscription: nil})
Run Code Online (Sandbox Code Playgroud)