2016-03-23 22 views
3

Bir işlev için iki kullanım durumum var mı? Abonelik olan kullanıcılar ve abonelik olmayan kullanıcılarla bir şeyler yapın.Elixir işlevlerindeki eşleştirilen argümanları nasıl kullanırım?

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

Ve

def add_subscription(subscription_id, user) 

nasıl desen böyle eşleştirme ve ayrıca hala ilk fonksiyonu kullanıcıya kullanmak yapacağız?

Teşekkürler!

cevap

9

Bir değişkene fonksiyon argüman bağlayabilir:

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

kongre desen maçtan sonra atamaktır:

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

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

Eğer 'yapmak OLMAYAN sebebi var mı def foo (kullanıcı =% Kullanıcı {subscription: nil}) Bu, "user" yi sağ tarafa atayacaktır? – cogle

+0

@cogle Bunu yapamamanız için teknik bir neden var. Her iki durumda da kullanıcıyı bağlar. Bunu bir desen eşlemesinin dışında yaparsanız, o zaman kullanıcı =% Kullanıcı {...} kullanıcı atayacaktır, oysa "% Kullanıcı {...} = kullanıcı" desen eşleşmesi olacaktır. – Gazler