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

在erlang中`when`保留字

在Erlang中,when是一个保留字,用于模式匹配和守卫语句中。它通常与模式匹配一起使用,用于在匹配成功时执行特定的操作。

when保留字的语法如下:

代码语言:txt
复制
Pattern when Guard1, Guard2, ..., GuardN -> Expression

其中,Pattern是要匹配的模式,Guard1, Guard2, ..., GuardN是守卫语句,Expression是在匹配成功且守卫条件满足时要执行的表达式。

when保留字的作用是在模式匹配过程中添加额外的条件,以过滤掉不符合条件的匹配项。它可以用于各种情况,例如限制变量的取值范围、类型检查、列表长度检查等。

以下是一些常见的使用场景和示例:

  1. 限制变量的取值范围:case Value of X when X > 0, X < 10 -> io:format("Value is between 0 and 10"); _ -> io:format("Value is not between 0 and 10") end.
  2. 类型检查:case Value of X when is_integer(X) -> io:format("Value is an integer"); X when is_float(X) -> io:format("Value is a float"); _ -> io:format("Value is not an integer or float") end.
  3. 列表长度检查:case List of [X, Y, Z] when length(List) =:= 3 -> io:format("List has 3 elements"); _ -> io:format("List does not have 3 elements") end.

在Erlang中,when保留字可以帮助开发者编写更加灵活和可读性强的模式匹配代码。它可以与其他模式匹配和守卫语句结合使用,以实现更复杂的逻辑判断和条件过滤。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

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

相关·内容

敏捷研发管理的实践

这些都是微创业期间需要不断优化和解决的难题。本文更多从项目管理角度出发,探讨研发项目管理的敏捷落地,对一些关键问题的思考,以及解决这些问题的经验和教训。...澄清的过程,也可以对未考虑到的问题进行识别,有效地减少进入迭代以后的变更。...这个过程很微妙,有时候大家讨论如何上升的过程,就已经达成一致的结论了。 变更项目经理的角色如何扮演?...微的产品从idea到上线过程,也存在类似的问题。...也避免了产品开发的反复和变更,让产品的生产过程更加可控。 3、小结 微的敏捷就是不断的满足组织需要的过程,让敏捷的各环节能够高效的运转,确保整体的高效交付。 ?

1.1K12

Java物联网开发(一) —— MQTT协议

一些要求比较严格的计费系统,可以使用此级别。计费系统,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。...原理 实现MQTT协议需要客户端和服务器端通讯完成,通讯过程,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。...是保留字段。...可变包头中的包标识符字段大多类型的包中比较常见。 CONNECT数据包的变量头按以下顺序包含四个字段:协议名称,协议版本,连接标志和活心跳。 ?...---- 而下面, 我们将介绍万物互联消息引擎 —— EMQ系列消息引擎 使用基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器 —— EMQ X (Erlang/Enterprise

4.8K31
  • Erlang & Unicode

    ,二进制数据是紧凑排列的:一个字节代表一个字符,而不是两个字(word)一个字符,这里如果存在疑问可以查看erlang官方文档关于内存消耗的列表:http://www.erlang.org/doc/efficiency_guide...UTF8编码.比特语法支持使用其它的编解码方式,但是erlang类库处理二进制都是使用UTF-8编码.字符串可以接受Unicode字符,但是Erlang的语言元素编写还是限制ISO-latin-1的范围内...%%shell输入包含中文的string,可以看到它就是一个List,注意中文字符对应的数值 [104,101,108,108,111,32,20013,22269,32,114,101,110]...被转成两组数字之后,也就无法被正则表达式命中了.而在Erlang Shell,中文字符可以被正确编码,所以会被正则命中.而仔细关注一下正则表达式,其实就是大致上覆盖了中文字符unicode字符集中对应的数值区间...translation modifier" when working with Unicode texts. The modifier is "t".

    1.6K20

    Actor 分布式并行计算模型: The Actor Model for Concurrent Computation

    actor模型,actor是唯一组成部分,actor带有地址以便互相发送消息。 actor按次序处理消息,比如你发送三个消息给一个actor,它们不会被并发处理。...就是你不可能考虑到所有导致失败的问题,与其绞尽脑汁处理这些问题,不如让它自然失败,然后指派给失败处理者处理(例如恢复到稳定状态),actor模型,这是可行的。...2.非阻塞性 Actor 模型,Actor 之间是异步通信的,所以当一个 Actor 发送信息给另外一个 Actor 之后,无需等待响应,发送完信息之后可以本地继续运行其他任务。...Erlang/OTP。Erlang 是一种通用的、面向并发的编程语言,使用 Erlang 编写分布式应用比较简单,而 OTP 就是 Erlang 技术栈的标准库。...Actor 模型 Erlang 语言中得到广泛支持和应用,其他语言的 Actor 逻辑实现在一定程度上都是参照了 Erlang 的模式。

    2K20

    RabbitMQ集群II

    可用性在生产系统是非常重要的指标, RabbitMQ 对集群进行了很好的支持 下面分享一下 RabbitMQ 的集群操作,详细可以参阅 官方文档 Tip: 当前版本 RabbitMQ 3.5.6 release...---- 概要 ---- 升级集群 升级Erlang或RabbitMQ版本,必须停止集群,因为集群不能容忍不同版本协同工作 集群升级之前最好确认哪一个Node是第一个升级的,这个node必须是最后一个关闭...否则在这个node和实际最后一个关闭的node之前的配置变更都会丢失 集群,要使用DISC node来主导升级,而不能使用RAM node,会报错,从安全层面也可以理解这样做的用意 When upgrading...upgrading Erlang, the whole cluster must be taken down for the upgrade (since clusters cannot run mixed...This will not be the case when upgrading from one patch version to another (i.e. from 3.0.x to 3.0.y)

    24940

    回顾Erlang简要

    Erlang: 创建和销毁进程非常快 进程间发送消息非常快 进程在所有操作系统上都具有相同的行为方式 可以拥有大量的进程 进程间不共享内存,完全独立 唯一的沟通方式是消息传递,每个进程都有一个邮箱与进程同步创建...动态代码载入是Erlang特性之一,总是调用最新模块的最新函数,哪怕当代码模块里运行时重新编译了该模块也是如此。...case Expression of Pattern1[ when Guard1] -> Expr-seq1; Pattern2[when Guard2]-> Expr-seq2...Erlang里,最小的寻址单元是1位,位串里的位序列可直接访问。 运行 运行Erlang程序的方式: Erlang shell 编译执行 Shell 脚本执行,例 #!...创建cookie的三种方法: 1) 文件$HOME/.erlang.cookie存放相同的cookie 2) Erlang启动时,可以用 –setcookie,例如 $erl -setcookieABCDEFG2048

    1.2K40

    yum安装rabbitmq3.6.11与erlange20配置及优化

    用于分布式系统存储转发消息,易用性、扩展性、高可用性等方面表现不俗。...RabbitMQ的消息都只能存储Queue,生产者生产消息并最终投递到Queue,消费者可以从Queue获取消息并消费。...Message acknowledgment 实际应用,可能会发生消费者收到Queue的消息,但没有处理完成就宕机(或出现其他意外)的情况,这种情况下就可能会导致消息丢失。...这里会产生另外一个问题,如果我们的开发人员处理完业务逻辑后,忘记发送回执给RabbitMQ,这将会导致严重的bug——Queue堆积的消息会越来越多;消费者重启后会重复消费这些消息并重复执行业务逻辑...This is a safe default and care should be taken when modifying this value, even when the host is a dedicated

    67110

    获取上下一个工作日实践

    获取上下一个工作日实践 前言 其实这个文章个人之前有进行过发布和讨论,在上一篇文章,介绍了如何通过postgresql数据库的sql语句构建一个工作日的表,并且介绍如何使用sql语法获取某一天往前或者往后的工作日或者自然日...❝上一篇文章链接:https://juejin.cn/post/7023008573827481637❞ 「注意使用的数据库为:PostgreSql」 前置准备 介绍具体的编码和处理逻辑之前,我们需要准备表结构和相关的数据...1 40 NO res_attr2 varchar 预留字段2 40 NO res_attr3 varchar 预留字段3 40 NO res_attr4 varchar 预留字段4 40 NO is_work_day...填充数据 有了表结构还不够,这里我们还需要填充数据,我们使用如下的sql填充数据内容,sql语句可能略微复杂了些,另外执行过程可能会出现缺失函数的情况,由于个人使用过程没有碰到此问题,所以就跳过了...IllegalArgumentException("传递参数有误,请确保所有参数均已传递"); } } 这里其实还有别的写法,比如增加一个BOOLEAN变量判断是往前还是往后,但是个人并不喜欢参数控制方法的行为

    76310

    【实践】消息队列RabbitMQ从入门安装到精通原理

    由于rabbitMq需要erlang语言的支持,安装rabbitMq之前需要安装erlang,执行命令: apt-get install erlang-nox # 安装erlang erl...此列表可包含模块的名称(模块相同的情况下,将同时用于认证来授权)或像{ModN, ModZ}这样的元组,在这里ModN将用于认证,ModZ将用于授权.2元组的情况, ModZ可由列表代替,列表的所有元素必须通过每个授权的确认...另外,Go语言中经常需要使用if语句来检查操作结果,为了避免代码到处散落if(err !...(1)准备 在上一篇介绍我们发送一个固定的字符串“Hello world"到队列,然后接收程序打印出来。...发送消息时需要提供一个routingKey,但是fanout类型的exchange这个值是被忽略的。

    1.2K20
    领券