【问题标题】:Pattern matching - ensure list contains only values of the one struct模式匹配 - 确保列表仅包含一个结构的值
【发布时间】:2016-09-03 15:44:01
【问题描述】:

假设我有一个名为%Product{} 的结构。我想将产品列表传递给方法:

def serialize(products) do

有没有办法对这个列表进行模式匹配或保护子句来确保这个列表只包含%Product{} 结构?

【问题讨论】:

    标签: elixir


    【解决方案1】:

    不,这对于模式匹配或保护子句都是不可能的。您必须在函数体内使用 Enum.all/2 之类的东西来检查这一点。

    【讨论】:

    • 有点意思——为什么不可能?
    • 您不能对整个列表进行模式匹配,因为它效率不高。列表的长度没有限制,即使询问列表的长度也是低效的。模式和守卫的隐含要求是它们是高效的,因此它们可以用来快速选择不同的函数子句。
    • @LukeImhoff well Kernel.length/1 允许在警卫中使用。
    • @asiniy 好吧,语言中没有可应用于列表参数的每个元素的模式,list of allowed guard functions 没有任何方法可以对列表的每个元素运行谓词。您可以对守卫中的列表做的唯一(特定于列表)的事情是获取它的长度、头部或尾部。
    猜你喜欢
    • 2017-04-29
    • 1970-01-01
    • 2019-12-13
    • 2017-04-01
    • 2016-06-29
    • 1970-01-01
    • 2019-06-20
    • 2012-04-24
    • 1970-01-01
    相关资源
    最近更新 更多