【问题标题】:How do I used matched arguments in elixir functions如何在 elixir 函数中使用匹配的参数
【发布时间】:2016-03-24 00:54:23
【问题描述】:

假设我有两个函数用例。对有订阅的用户做一些事情,对没有订阅的用户做一些事情。

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

还有

def add_subscription(subscription_id, user)

如何进行这样的模式匹配,并且仍然在第一个函数中使用用户?

谢谢!

【问题讨论】:

    标签: pattern-matching elixir


    【解决方案1】:

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

    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})
    

    【讨论】:

    • 你不做def foo(user = %User{subscription: nil})的原因是因为这会将user分配到右侧吗?
    • @cogle 你不能这样做是有技术原因的。无论哪种情况,它都会绑定用户。但是,如果您在模式匹配之外执行此操作,则 user = %User{...} will assign user, whereas %User{...} = user` 将进行模式匹配。
    猜你喜欢
    • 2019-11-07
    • 2020-11-25
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    相关资源
    最近更新 更多