首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否有一种简单的方法||在elixir中匹配无模式?

在Elixir中,_ 符号用作通配符,用于匹配任何单个值,而不关心该值是什么。这可以被视为“无模式”匹配,因为它不指定任何特定的模式。以下是如何在Elixir中使用_进行匹配的示例:

代码语言:javascript
复制
iex> [head | tail] = [1, 2, 3]
[1, 2, 3]
iex> head
1
iex> tail
[2, 3]

iex> [_, second, _] = [1, 2, 3]
[1, 2, 3]
iex> second
2

在上面的例子中,_ 被用来匹配列表中的第一个和第三个元素,但我们并不关心它们的值。我们只关心第二个元素,它被绑定到变量second上。

如果你想要匹配任意数量的值,你可以使用...(省略号)来表示可变数量的元素,这在模式匹配中称为“捕获”:

代码语言:javascript
复制
iex> [first, rest @ _] = [1, 2, 3, 4]
[1, 2, 3, 4]
iex> first
1
iex> rest
[2, 3, 4]

在这个例子中,rest @ _匹配了从第二个元素开始的所有剩余元素,并将它们绑定到rest变量上。_在这里并没有实际的作用,因为rest已经捕获了所有的剩余元素。

如果你想要匹配任何值但不做任何操作,你可以简单地使用_

代码语言:javascript
复制
iex> [_, _, _, last] = [1, 2, 3, 4]
[1, 2, 3, 4]
iex> last
4

在这个例子中,前三个元素被_匹配,但我们只关心最后一个元素,它被绑定到last变量上。

总之,_在Elixir中用于匹配任何单个值,而不关心该值是什么,这可以被视为一种简单的“无模式”匹配方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

(译) Understanding Elixir Macros, Part 3 - Getting into the AST

但在此之前, 我要请你认真考虑一下你的代码是否有有必要基于宏. 尽管宏十分强大, 但也有缺点. 首先, 就像之前我们看到的那样, 比起那些普通的运行时抽象, 宏的代码会很快地变得非常多....然而, 在 shell 会话中可以很简单地探索和使用 AST, 我通常就是这样探索 AST 结构的....注意我们是如何对输入表达式进行模式匹配的, 希望它符合某种结构. 这完全没问题, 因为宏是函数, 这意味着您可以依赖于模式匹配、guards(守卫), 甚至有多子句宏....在我们的例子中, 我们依靠模式匹配将比较表达式的每一边(被 quoted 的)带入相应的变量....首先, 在模式匹配中, 硬编码(hard code) :== 被变量 operator 取代了(第 2 行).

15550
  • (译) Understanding Elixir Macros, Part 4 - Diving Deeper

    在前一篇文章中, 我向你展示了分析输入 AST 并对其进行处理的一些基本方法. 今天我们将研究一些更复杂的 AST 转换. 这将重提已经解释过的技术....在开始之前, 我要再提一次, 你应该仔细考虑你是否真的需要这样的结构. 例如 deftraceable 这样的宏引入了一个每个代码维护者都需要了解的东西. 看着代码, 它背后发生的事不是显而易见的....所以接下来我们需要: 从 quoted 的头中提取函数名和参数 将这些值注入我们的宏返回的 AST 中 将函数体注入同一个 AST 打印跟踪信息 我们可以使用模式匹配从这个 AST 片段中提取函数名和参数...然而, 我应该立即指出, 这种实现存在一些问题: 宏不能很好地处理守卫(guards) 模式匹配参数并不总是有效的(例如, 当使用 _ 来匹配任何 term 时) 在模块中直接动态生成代码时, 宏不起作用...解决方案是检测这种情况, 并以一种特殊的方式处理它.

    10530

    JavaScript模式匹配的未来

    这里有一个超基础的函数叫做 greet,它接受一个带有'ID'和'role'的用户,并根据用户角色返回问候语。听起来简单吗?...简化复杂性的模式匹配艺术 模式匹配可以结束这种复杂性。想象一个你有一个 when 子句可以救我们摆脱这种冗长的迷宫的世界。 简单地说,模式匹配允许我们检查一个输入是否符合一个模式或一个特定的类型。...Hello Owner ${input.id}`, _: throw `Invalid role: ${input.role}`, } 在这里,match函数接受输入,when子句检查 input 中的角色是否匹配指定的角色...但是,我希望看到我们最喜欢的语言走得更远,尤其是当模式匹配与函数定义结合使用时。这可能会让我们走出舒适区,但一旦你开始探索它,你就会意识到它所拥有的力量和它带来的简单性。...希望有一天JavaScript能够实现这种基于模式的函数重载,相信这将带来一些最好的编程体验。就JavaScript的未来而言,作者认为模式匹配是最令人兴奋的前景之一。

    11010

    教程 | 如何使用Elixir语言实现深度学习?剖析多层神经网络的构建和训练

    创建你的第一个神经网络是比较简单的,在过程中你可以看到如何用少量的代码来自动完成一项给定的任务。 在这篇文章中,我们将使用 Elixir 编程语言创建一个标准的 3x3 深度学习神经网络。...这种新的模式转变是至关重要的,以鉴别读者是否计划在技术行业保持相关性。自从 2011 年 Jeopardy 节目上 WATSON 的到来,老的编程和解决问题的方式已经死了。...在训练期间,如果神经网络发现与训练的目标发生偏离,它需要一种方法来改进。刚才我提到了学习速率常数。这就是改进神经网络要用到的。...因为我们需要将每一个计算中结果作为一个列表,我们然后打包结果以形成适当形式的输出。 我们现在可以计算、神经元的输出。但是,在完成之前还需要一个步骤。我们需要一种将数据从一层移动到下一层的方法。...幸运的是,我们可以很容易的通过 Elixir 的模式匹配做到这一点。 ? 第一个前馈仅接受输入列表,并计算输入层与隐藏层相连接的输出。然后将该结果传递到第二个前馈函数。

    1.1K130

    继续探索with语句

    在上一篇博客《漂亮的with,鱼与熊掌可以兼得》中,展现了with的优雅之处,然而在比较with与|>时,言犹未尽,讲得不够透彻。...在那篇博客中,我说: 毕竟with/1并不是try/catch,它并不能捕获执行中抛出的错误,然后转向else进行错误处理。只有当模式匹配出现错误时,才会转向else。...如果进行了这样的重构,是否意味着|>也可以将健壮性与优雅结合起来呢?...因为在Elixir中,函数的定义使用了模式匹配,因此,在定义参与|>操作的函数时,可以通过模式匹配来考虑各种情况,这其中可以包含对{:error, error}情形的处理,使得数据流不至于在流经该函数时因为错误而崩溃掉...因为with语句同样使用了模式匹配,只要参与的方法不能满足模式匹配的条件,就不会再执行do,从而规避了错误引起的终止: defp results(conn, search_params) do

    72670

    5 门正在奋力崛起的编程语言

    无论市场如何变化,实际要求似乎永远能够在某些语言、特别是新兴编程语言当中得到满足。在今天的文章中,我们将纵览行业中的开发新趋势、对五种新兴编程语言做出点评,同时概括其强大功能。...虽然在使用范围方面,这几种语言的影响力还比较有限,但已经有众多企业开始将其引入生产环境,预计未来几年中编程语言市场还将迎来新一轮更迭。我们闲言少叙,马上进入今天的新兴语言汇总环节。...利用庞大的 JavaScript 生态系统显著降低 Elm 社区的重复工作量。 Kotlin ? Kotlin 在我们今天的榜单中位列第二。...Elixir 同样在努力为开发人员的日常工作带来福音,对这一目标的坚持也让它成功进入我们的这份评选榜单。Elixir 直接采用大量来自 Ruby 的优秀语法,但同时又能提供 C 语言的编码优势。...Elixir 语言在设计层面主要强调可扩展性、实用性以及可持续性,其核心特征包括: 监督; 坚持使用数据结构; 无剥离效应; 模式匹配; 无共享并发; 热交换代码。

    1K20

    五种拥有光明发展前景的新兴编程语言

    无论市场如何变化,实际要求似乎永远能够在某些语言、特别是新兴编程语言当中得到满足。在今天的文章中,我们将纵览行业中的开发新趋势、对五种新兴编程语言做出点评,同时概括其强大功能。...虽然在使用范围方面,这几种语言的影响力还比较有限,但已经有众多企业开始将其引入生产环境,预计未来几年中编程语言市场还将迎来新一轮更迭。我们闲言少叙,马上进入今天的新兴语言汇总环节。...利用庞大的 JavaScript 生态系统显著降低 Elm 社区的重复工作量。 Kotlin Kotlin 在我们今天的榜单中位列第二。...Elixir Elixir 同样在努力为开发人员的日常工作带来福音,对这一目标的坚持也让它成功进入我们的这份评选榜单。...Elixir 语言在设计层面主要强调可扩展性、实用性以及可持续性,其核心特征包括: 监督; 坚持使用数据结构; 无剥离效应; 模式匹配; 无共享并发; 热交换代码。

    1K10

    Elixir: 编程语言的未来

    这篇文章谈一谈最近火爆的 Elixir,同时说一下对编程语言选择的看法。同时作为 Erlang 发烧友,Elixir 不可不提。即使有了那么多编程语言 Elixir 也值得接触。...最好还能 hot-reload 就像很多前端工具一样,只要源码有一点变更,不需要刷新页面自动反应在浏览器中。Play framework 类似的自动加载功能也可以。...否则你要么需要记住和理解复杂的 GC 调优参数、要么像 PHP 那样过一段时间将进程杀掉重来。 元编程和 DSL 扩展性 在语法级别的抽象和封装更能提高开发效率。Elixr 中如何实现 DSL。...比如,连接到集群,读取状态或者进行一次性的数据操作,然后断开。 测试系统 最好有一种比较标准的单元测试模型。比如 Java、Node.js、Scala、Elixir 等等。...比如:真正的抢占式调度;充分利用多核心并行执行;Actor 模型;监控树;透明的分布式; 极其高的稳定性;代码的热更新部署;函数式编程;模式匹配;等等。并且很多 Erlang 下工具也是可以直接使用。

    2.9K40

    从 Go 开发者的角度看 Elixir 的设计思想

    我只是把我几个小时的调研结果汇总一下,以便能够帮助大家花几分钟读完之后再看 Elixir 是否吸引到了你。...本文内容目录如下: Elixir 是什么 弹性的不可变性 模式匹配 原子 Processes 与 Goroutines Supervisors 结构体与协议 管线操作符|> 宏 标准库和 OTP Phoenix...它不局限于 web 开发,还内建了一个可以在传输层加入插件的一个 socket 库 Phoenix Channels,并且已经有 JavaScript, Swift, ObjC, C# 和 Java的实现了...最后以 Elixir 作者 José Valim 对它的评价作为结语: 「我不会将Elixir定义为更好的 Ruby。...在 Elixir 之前,我本人的主要语言确实是 Ruby,但是我创建 Elixir 的部分工作/研究的本意是想让其获取更多经验,从而丰富其生态系统。

    1.1K30

    漂亮的with,鱼与熊掌可以兼得

    本质上讲,for其实用于collection中对值的匹配(相当于是flatMap与filter),而with/1则直接匹配值。...例如,对于定义的这样两个函数: def ok(x), do: {:ok, x}def error(x), do: {:error, x} for用于函数返回值的collection,然后利用模式匹配:ok...,就能起到filter的作用: for {:ok, x} <- [ok(1), error(2), ok(3)], do: x #=> [1, 3] with则直接作用在函数上,然后根据模式匹配分别处理正确场景与错误场景...毕竟with/1并不是try/catch,它并不能捕获执行中抛出的错误,然后转向else进行错误处理。只有当模式匹配出现错误时,才会转向else。...with/1将正常场景与异常场景用一种相对优雅的方式分隔开,相较于使用|>,虽然显得还不够直观,但至少保证了代码逻辑结构足够的清晰度,干净利落地体现了编码意图,且代码还是足够健壮的。

    87880

    超级简单!Elixir和ScyllaDB教你创建CRUD CLI,惊人的效率提升!

    如果您了解用于通信的高流量应用程序、需要低延迟和良好容错能力的应用程序,您很可能已经遇到过 Elixir(作为一种编程语言)和 ScyllaDB(一种旨在低延迟的 NoSQL 数据库)的名称。...我不会过多介绍安装的细节,因为这会使本文更简单。我们开始安装 Elixir。安装 Elixir一般来说,安装 Elixir 有两种主要方法:直接从包管理器安装或使用编程语言的版本管理器安装。...elixir -v好吧,现在我们已经安装好了,我们可以通过在终端模拟器中输入来测试一切是否正常,我们将得到类似于以下内容的响应:Erlang/OTP 25 [erts-13.2.2.2] [source...如果您想了解更多信息,请单击此处以更好地了解 Elixir 如何与模式匹配配合使用。命令好吧,现在是期待已久的时刻:在我们的应用程序中添加负责执行命令的函数!...);我们打印这些值;我们在中添加了完整的列表songs;我们等待用户输入一个条目,说明他想要删除哪个索引,然后我们解析将保存在的条目input;我们检查输入的索引是否存在于songs;如果你是:我们创建查询

    48630

    (译) Understanding Elixir Macros, Part 5 - Reshaping the AST

    上次我介绍了一个基本版本的可追溯宏 deftraceable, 它允许我们编写可跟踪的函数. 这个宏的最终版本还有一些遗留的问题, 今天我们将解决其中一个 — 参数模式匹配....从今天的练习应该认识到, 我们必须仔细考虑关于宏可能接收到的输入的所有假设情况. 问题所在 正如我上次所暗示的那样, 当前版本的 deftraceable 不能使用模式匹配的参数....最后, 在推导式的末尾, 我们返回一个元组, 该元组由临时的名称和 quoted 的完整模式组成 - (例如 _ = arg1, 或 0 = arg2)....我们在这个 lambda 里做的实际上是一个模式匹配, 我们在寻找 {fun_name, context, args}....的 quoted 表现形式. 一旦我们遇到匹配此模式的节点, 我们只需要用新的(修饰过的)输入参数替换掉旧的. 在所有其它情况下, 我们简单地返回输入的 AST, 使得树的其余部分不变.

    14330

    Elixir和OTP中面向过程的编程指南

    在每种情况下,范式通常具有一种“主要”焦点和技术,这是该族语言的驱动力: 在OO语言中,类或对象作为一种通过操纵该状态(方法)封装状态(数据)的方法。...对于具有大量继承性的系统尤其如此,它使用抽象接口或没有强大的类型。在大多数情况下,开发人员记住大量的系统结构是有效的(什么类有什么方法和哪些方式使用)变得很重要。...Elixir / OTP和面向过程的编程 在Elixir / Erlang和OTP中,通信原语是执行语言的虚拟机的一部分。在进程之间和机器之间通信的能力建立在语言系统的中心。...对于一个消耗大量数据的系统,通过使用多层流程来减少数据量是一种常见且有用的模式。 通过在一组独立的进程中执行计算,我们可以管理这些进程的负载,并确保它们的稳定性和资源需求。...有了这种变化,各国的结果并不是简单的原始投票结果的汇总,而是国家/省份结果的汇总。这就改变了从原始状态到状态/省份过程的过程分配,从而将状态/省过程的结果输入到国家进程中。

    1.4K10

    Python 高级教程之结构化模式匹配

    声明式方法 读者可能会通过使用 C、Java 或 JavaScript(以及许多其他语言)中的 switch 语句将主题(数据对象)与文字(模式)进行匹配的简单示例来了解模式匹配。...switch 语句通常用于将对象/表达式与包含文字的 case 语句进行比较。 更强大的模式匹配示例可以在 Scala 和 Elixir 等语言中找到。...对于结构模式匹配,该方法是“声明性的”,并明确说明数据匹配的条件(模式)。 虽然使用嵌套“if”语句的“命令式”指令系列可用于完成类似于结构模式匹配的事情,但它不如“声明式”方法清晰。...简单模式:匹配文字 让我们把这个例子看成最简单形式的模式匹配:一个值,即主题,被匹配到几个字面量,即模式。在下面的示例中,status是 match 语句的主题。...你可以使用 | (“ or ”)在一个模式中组合几个字面值: case 401 | 403 | 404: return "Not allowed" 无通配符的行为 如果我们修改上面的例子,去掉最后一个

    63530
    领券