Elixir学习笔记——自定义符号

news2024/11/25 9:04:13

Elixir 提供双引号字符串以及一个称为 charlists 的概念,它们使用 ~c“hello world”符号语法定义。在本章中,我们将了解有关符号的更多信息以及如何定义我们自己的符号。

Elixir 的目标之一是可扩展性:开发人员应该能够扩展语言以适应任何特定领域。符号为使用自定义文本表示扩展语言提供了基础。符号以波浪符号 (~) 开头,后跟单个小写字母或一个或多个大写字母,然后是分隔符。可选修饰符添加在最后一个分隔符之后。

正则表达式

Elixir 中最常见的符号是 ~r,它用于创建正则表达式:

Elixir 提供与 Perl 兼容的正则表达式 (regexes),由 PCRE 库实现。正则表达式还支持修饰符。例如,i 修饰符使正则表达式不区分大小写:

查看 Regex 模块以获取有关其他修饰符和正则表达式支持的操作的更多信息。

到目前为止,所有示例都使用 / 来分隔正则表达式。但是,符号支持 8 种不同的分隔符:

支持不同分隔符的原因是为了提供一种不使用转义分隔符来编写文字的方法。例如,带有正斜杠的正则表达式,如 ~r(^https?://),读起来可能比 ~r/^https?:\/\// 更好。同样,如果正则表达式有正斜杠和捕获组(使用 ()),那么您可以选择双引号而不是括号。

字符串、字符列表和单词列表符号

除了正则表达式之外,Elixir 还附带了其他三个符号。

字符串

~s 符号用于生成字符串,就像双引号一样。当字符串包含双引号时,~s 符号很有用:

字符列表

~c 符号是表示字符列表的常规方式。

单词列表

~w 符号用于生成单词列表(单词只是常规字符串)。在 ~w 符号内,单词由空格分隔。

~w 符号还接受 c、s 和 a 修饰符(分别用于字符列表、字符串和原子),它们指定结果列表元素的数据类型:

字符串符号中的插值和转义

Elixir 支持一些符号变体来处理转义字符和插值。特别是大写字母符号不执行插值或转义。例如,虽然 ~s 和 ~S 都会返回字符串,但前者允许转义代码和插值,而后者不允许:

以下转义代码可用于字符串和字符列表:

除此之外,双引号字符串内的双引号需要转义为 \",类似地,单引号字符列表内的单引号需要转义为 \'。尽管如此,更改分隔符(如上所示)比转义它们更好。

符号还支持 heredocs,即三个双引号或单引号作为分隔符:

heredoc 符号最常见的用例是编写文档。例如,在文档中编写转义字符很快就会变得容易出错,因为需要对某些字符进行双重转义:

通过使用 ~S,可以完全避免此问题:

日历符号

Elixir 提供了多种符号来处理各种时间和日期。

日期

%Date{} 结构包含年、月、日和日历字段。您可以使用 ~D 标记创建一个:

时间

%Time{} 结构包含小时、分钟、秒、微秒和日历字段。您可以使用 ~T 标记创建一个:

纯日期时间(无UTC)

%NaiveDateTime{} 结构包含日期和时间字段。您可以使用 ~N 标记创建一个:

为什么称之为 naive?因为它不包含时区信息。因此,给定的日期时间可能根本不存在,或者在某些时区可能存在两次 - 例如,当我们将时钟向前和向后移动以进行夏令时时。

UTC日期时间

%DateTime{} 结构包含与 NaiveDateTime 相同的字段,并添加了用于跟踪时区的字段。~U 标记允许开发人员在 UTC 时区创建日期时间:

自定义符号

正如本章开头所暗示的,Elixir 中的符号是可扩展的。事实上,使用符号 ~r/foo/i 相当于使用二进制和字符列表作为参数调用 sigil_r:

我们可以通过 sigil_r 访问 ~r 符号的文档:

我们还可以通过实现遵循 sigil_{character} 模式的函数来提供我们自己的符号。例如,让我们实现返回整数的 ~i 符号(使用可选的 n 修饰符使其为负数):

自定义符号可以是单个小写字符,也可以是大写字符后跟更多大写字符和数字。

符号还可以在宏的帮助下用于执行编译时工作。例如,Elixir 中的正则表达式在源代码编译期间被编译为高效表示,因此在运行时跳过此步骤。如果您对这个主题感兴趣,您可以了解有关宏的更多信息,并查看在内核模块(其中定义了 sigil_* 函数)中信号是如何实现的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1832835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vatee万腾平台,让智能更懂你

在数字化浪潮席卷全球的今天,智能科技已经渗透到我们生活的方方面面。然而,真正的智能不仅仅是技术的堆砌,更是对人性需求的深刻理解和满足。Vatee万腾平台,正是这样一个让智能更懂你的平台,它以其独特的方式&#xff…

select 下拉框不可选

select 下拉框不可选 disabled和readonlyselect 下拉框不可选择CSS pointer-events 属性 通常情况下,设置表单输入框不可操作的时候会选择使用disabled或者readonly,那么disabled和readonly有什么区别呢? disabled和readonly 首先来说这两个…

vscode插件开发之 - 消息通信

在开发vscode插件过程中,有一个典型场景是webview与extension.ts进行通信,例如,webview上的某些信息发送改变时,需要发送消息传递给extension.ts. 如果使用react框架构建vscode插件的webview,如何实现webview与extensi…

怎么把两个音频合成一个?将两个音频合成一个的四种方法

怎么把两个音频合成一个?在当今数字化的时代,音频处理已经成为我们生活中不可或缺的一部分。有时候,我们会希望将两段音频合成为一个,无论是为了制作音乐混音、创作声音效果,还是为了编辑播客节目或视频配音。合成音频…

硕思闪客精灵软件最新版下载及详细安装教程

闪客精灵(Sothink SWF Decompiler)是一款先进的SWF反编译软件,它不但能捕捉、反编译、查看和提取Shock Wave Flash影片(.swf和.exe格式文件),而且可以将SWF格式文件转化为FLA格式文件。 安 装 包 获 取 地 …

CentOS搭建kubernetes集群详细过程(yum安装方式)

kubernetes集群搭建详细过程(yum安装方式) Kubernetes,也被称为K8s,是一个多功能的容器管理工具,它不仅能够协调和调度容器的部署,而且还能监控容器的健康状况并自动修复常见问题。这个平台是在谷歌十多年…

性能测试、负载测试、压力测试、稳定性测试简单区分【超详细】

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 性能测试是一个总称,可细分为性能测试、负载测试、压力测试、稳定性测试。 性能测试…

XZ后门故事:初始分析

2024年3月29日,Openwall OSS安全邮件列表上的一条消息“炸醒”了整个信息安全、开源和Linux社区:XZ出现了一个CVSS评分10.0的恶意后门。 这个后门库的特殊危险在于OpenSSH服务器进程sshd使用它。在多个基于systemd的发行版上(包括Ubuntu、De…

二叉树-根据先序遍历和中序遍历序列重建二叉树

目录 一、问题描述 二、解题思路 1.首先明确先序遍历和中序遍历的性质: 2.确定根节点及左右子树 3.对子树进行递归操作 4.递归返回条件 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 1.首先明确先序遍历和中序遍历的性质: 先序遍历&am…

基于ChatGPT-4o自然科学研究全流程实践技术应用

自然科学研究遵循严谨的科学方法论,包括文献调研、问题综述、试验设计、提出假设、数据清洗、统计诊断、大数据分析、经典统计模型(回归模型、混合效应模型、结构方程模型、Meta分析模型)、参数优化、机器/深度学习、大尺度模型构建与模拟、论…

Centos7 安装oracle 11.2.0.4

荆轲刺秦王 1. 准备工作 需要下载 Oracle 11g 安装包 2.HostName修改: hostnamectl set-hostname oracle 3. 配置hostname(本机IP映射)注意:192.168.116.129 需要换乘本地ip vi /etc/hosts 192.168.116.129 oracle # 测试hos…

企业用户使用OV SSL证书趋势增长

随着网络安全的需求度日益提高,https证书也成为了当下最受欢迎的数字证书之一,主要是用于保护网站和应用程序的安全,并提升用户对网站的信任度,且只有企业或组织才可申请。 OV SSL证书全称Organization Validation SSL(组织验证性…

【前端】Nesj 学习笔记

1、前置知识 1.1 装饰器 装饰器的类型 declare type ClassDecorator <TFunction extends Function>(target: TFunction) > TFunction | void; declare type PropertyDecorator (target: Object, propertyKey: string | symbol) > void; declare type MethodDe…

CMSIS-RTOS2简介

本文介绍CMSIS-RTOS2。 1.引入 CMSIS-RTOS2在基于Arm Cortex处理器的设备上运行的实时操作系统内核上指定了通用RTOS接口。应用程序和中间件组件可以使用CMSIS-RTOS2 API在各种软件生态系统中实现更好的代码重用和更简单的集成。 CMSIS-RTOS2还指定了RTOS内核使用的标准OS T…

机械师电脑文件丢失怎么办?6个恢复方法,希望能帮到您

机械师电脑作为高性能的计算机品牌&#xff0c;受到众多用户的青睐。然而&#xff0c;即便是品质卓越的电脑&#xff0c;也难免会遇到文件丢失的困扰。无论是由于误操作、系统故障还是硬盘损坏&#xff0c;文件丢失都可能给用户带来不小的麻烦。当您发现机械师电脑上的文件突然…

使用Midjourney为产品创建出色效果图-关键词

使用MJ为产品创建效果图并不难&#xff0c;可以使用这个固定提示词公式。 Mockup empty, blank [ product ], [ decorating items ] [ background or context ], [ 1- 3 descriptive style], [ color palette ] 创建产品形象 首先&#xff0c;你需要准备一个透明背景的产品。…

基于JSP的二手车交易网站

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果你对二手车交易网站感兴趣或有相关开发需求&#xff0c;欢迎随时联系我。我的联系方式可以在文末找到。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSPJava 工具&#…

IPA清洁棉签 IPA清洁擦拭棒:打印机头、电子设备等清洁的有力工具!

在数字化快速发展的今天&#xff0c;打印机头、电子设备等已经成为了我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着使用时间的增长&#xff0c;这些设备往往会因为灰尘、油渍等污染物的积累而影响其性能。此时&#xff0c;一款高效、便捷的清洁工具就显得尤为重…

可通过小球进行旋转的十字光标(vtkResliceCursor)

前一段事件看到VTK的一个例子&#xff1a; 该案例是vtk.js写的&#xff0c;觉得很有意思&#xff0c;个人正好也要用到&#xff0c;于是萌生了用C修改VTK源码来实现该功能的想法。原本以为很简单&#xff0c;只需要修改一下vtkResliceCursor就可以了&#xff0c;加上小球&#…

压缩列表(ziplist)

压缩列表&#xff08;ziplist&#xff09;&#xff1a; ziplist是列表键和哈希键的底层实现之一 当一个列表键只包含少量列表项&#xff0c;并且每个列表项要么是小整数或者短字符串&#xff0c;那么redis会使用ziplist来做列表键的实现当一个哈希键只包含少量键值对&#xff0…