2016-03-23 7 views
3

関数のユースケースは2つあります。サブスクリプションを持っているユーザーとサブスクリプションを持っていないユーザーで何かをしてください。エリクシール関数で一致する引数を使用するにはどうすればいいですか

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

そして

def add_subscription(subscription_id, user) 

どのように私は、パターンは次のように一致しても、まだ第一の機能でユーザーを使用していますか?

ありがとうございます!

答えて

9

あなたは変数に関数の引数をバインドすることができます。

def add_subscription(subscription_id, %User{subscription: nil} = user) 

大会は、パターンマッチの後に割り当てることです:

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

# Instead of this 
def foo(user = %User{subscription: nil}) 
+0

あなたは 'デフfooの(ユーザーをしない理由です=%User {subscription:nil}) 'これは' user'を右側に割り当てるからでしょうか? – cogle

+0

@cogleできない理由は技術的な理由があります。どちらの場合も、ユーザーをバインドします。しかしパターンマッチの外側でこれを行うと、 'user =%User {...}はユーザを割り当てますが、'%User {...} = user'はパターンマッチします。 – Gazler

関連する問題