写点什么

Elixir 1.3 带来新的语言功能、API 和改进后的工具

  • 2016-07-03
  • 本文字数:940 字

    阅读完需:约 3 分钟

José Valim 最近宣布 Elixir 1.3 中弃用了必要赋值,添加了一些新的类型和存取器,提升了其 Mix 搭建工具和 ExUnit 单元测试框架。

Elixir 1.3 弃用了对需要在外部作用域进行访问的变量的赋值,如果发现有这样的情况就会立刻发出警告。这个操作的根据是给在外部作用域中的变量进行赋值,从而给内部作用域中的值添加隐式返回值。例如下面的函数定义:

复制代码
def format(message, opts) do
path =
if (file = opts[:file]) && (line = opts[:line]) do
relative = Path.relative_to_cwd(file)
message = Exception.format_file_line(relative, line) <> " " <> message
relative
end
{path, message}
end

if 块语句,除了返回 path 的值还改变了 message 中的值,这个值后面从封闭的函数中由 path 返回。在 Elixir 1.3 中这被认为是错误的操作,需要重构成如下的代码,很明确地定义 if 块返回两个值后方可使用:

复制代码
def format(message, opts) do
path =
if (file = opts[:file]) && (line = opts[:line]) do
relative = Path.relative_to_cwd(file)
message = Exception.format_file_line(relative, line) <> " " <> message
{relative, message}
end
{path, message}
end

另外一个可以方便地遍历嵌套的数据结构的语言功能是存取选择器。以下的代码中向你展示了如何遍历一个与 language 值相关联的 map,并将 name 值中所有的元素都转换为大写:

复制代码
iex> update_in myMap, [:languages, Access.all(), :name], &String.upcase/1

Elixir 的搭建工具 Mix 现在可以进行对照检查,这个功能非常实用,比如说在检测对不存在的模块和函数的调用时,或是定位所有调用了属于某个模块的函数时,或是产生依赖关系图的时候。另外,Mix 简化了其输出,因此可以更方便地发现警告。Elixir 1.3 中 Mix 的另一大改进是可以更好地进行依赖跟踪,因此编译时间会进一步缩短。

Elixir 的单元测试框架 ExUnit 利用 Mix 的对照检查功能添加了一个新标志–stale,它可以保证从上次运行之后,只有修改过的单元测试才会被执行。ExUnit 还优化了断言输出并提升了对于使用命名块的测试。

Elixir 1.3 还进行了更多改变。你可以阅读发行说明中的完整列表。

查看英文原文 Elixir 1.3 Brings New Language Features, APIs, and Improved Tooling

2016-07-03 19:0010612
用户头像

发布了 218 篇内容, 共 76.2 次阅读, 收获喜欢 76 次。

关注

评论

发布
暂无评论
发现更多内容

Pencils Protocol Season 3 现已开启,多重收益一览

BlockChain先知

信通院《智能化数据管理工具能力要求》标准发布,Aloudata 受邀参编!

Aloudata

DataOps 数据管理

Pencils Protocol Season 3 现已开启,一鱼多吃最大化收益

股市老人

Pencils Protocl全新品牌升级,如何构建 LRT 赛道新范式?

股市老人

全新品牌升级的 Pencils Protocl,如何构建 LRT 赛道新范式?

股市老人

全新品牌升级的 Pencils Protocl,构建 LRT 赛道新范式

西柚子

拼多多API指南:拼多多商品详情数据接口丨拼多多API实时数据接口

tbapi

拼多多API接口 拼多多商品详情数据接口 拼多多商品数据接口

Node下调试better-sqlite3

麦兜

Moonchain 随柏林市长访问东京,并与三菱和富士通等建立合作预期

股市老人

Pencils Protocol Season 3 现已开启,多重收益一览

股市老人

一文读懂Pencils Protocol Season 3:多重收益实现一鱼多吃

西柚子

阿里云数据库 RDS SQL Server版实战【性能优化实践、优点探析】

申公豹

阿里云

KubeEdge v1.17.0发布!数据处理能力与易用性全面提升

华为云开发者联盟

Kubernetes 容器 华为云 华为云开发者联盟 企业号2024年5月PK榜

阿里云 EMR Serverless Spark 版开启免费公测

阿里云大数据AI技术

大数据 数据处理 EMR

Pencils Protocol Season 3 现已开启,一鱼多吃最大化收益

石头财经

2024-05-22:用go语言,你有一个包含 n 个整数的数组 nums。 每个数组的代价是指该数组中的第一个元素的值。 你的目标是将这个数组划分为三个连续且互不重叠的子数组。 然后,计算这三个子数

福大大架构师每日一题

福大大架构师每日一题

音视频常见问题(六):视频黑边或放大

ZEGO即构

直播 视频编解码 音视频开发 音视频引擎

阿里云PAI发布DeepRec Extension,打造稳定高效的分布式训练,并宣布开源!

阿里云大数据AI技术

人工智能 阿里云 开源 deeprec

用数据,简单点!奇点云2024 StartDT Day数智科技大会,直播见

先锋IT

2024 年 5 个 GO REST API 框架

幂简集成

Go REST API

基于 Milvus + LlamaIndex 实现高级 RAG

Zilliz

Milvus Zilliz llamaindex rag

智谱AI、OpenAI、谷歌等16家顶级AI公司签署前沿人工智能安全承诺

技术研究院

Python Web Service开发及优化

我再BUG界嘎嘎乱杀

Python nginx flask web服务

Python实现大麦网抢票的四大关键技术点解析

我再BUG界嘎嘎乱杀

Python 编程 后端 软件开发 抢票

用python优雅实现:序列A依照序列B排序

我再BUG界嘎嘎乱杀

Python 编程 后端 软件开发

Elixir 1.3带来新的语言功能、API和改进后的工具_后端_Sergio De Simone_InfoQ精选文章