写点什么

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:0010383
用户头像

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

关注

评论

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

写个JS深拷贝,面试备用

helloworld1024fd

JavaScript

开奖啦!看看 9 月月更获奖名单有没有你?

InfoQ写作社区官方

热门活动

ctk流程

留白的艺术

MASA Framework的异常处理

MASA技术团队

.net MASA Framewrok MASA

开源云原生平台对比 KubeSphere vs Rainbond

北京好雨科技有限公司

公网对讲SDK| 快速搭建公网对讲应用

anyRTC开发者

音视频 监听 快对讲 AI降噪 录音

从零开始实现一个Promise

helloworld1024fd

JavaScript

手撕常见JS面试题

helloworld1024fd

JavaScript

基于纯前端类Excel表格控件实现在线损益表应用

葡萄城技术团队

前端 Excel 报表

故障复盘究竟怎么做?美图SRE结合10年经验做了三大总结(附模板)

TakinTalks稳定性社区

运维 SRE SRE实践

kubernetes为什么会火?为什么值得我们学习?

王中阳Go

Kubernetes k8s 容器编排 10月月更 动态扩缩

【kafka】kafka的服务复用与隔离设计方案

石臻臻的杂货铺

kafka 后端 10月月更

Qt | 本地存储配置信息 QSettings

YOLO.

qt 10月月更 C++

云原生时代的DevOps平台设计之道

北京好雨科技有限公司

【数据结构之红黑树】深入原理与实现

C++后台开发

数据结构 后端开发 红黑树 linux开发 C++开发

数有引力 智造未来 | 华为云云商店星品推介会·厦门站

极客天地

数据结构学习,串篇(顺序串及算法)

IC00

学习 数据结构 算法 学习笔记 10月月更

C# ref用法,实现引用传递(地址传递)

IC00

C# 学习 程序员 上位机 10月月更

直播预告|Apache APISIX x KubeSphere 在线 Meetup 来袭

API7.ai 技术团队

APISIX KubeSphere

大学毕业后转行软件测试我后悔了

测吧(北京)科技有限公司

测试

KMP算法的实现详解

lovevivi

c 数据结构 10月月更

中原银行:基于StarRocks构建OLAP全场景架构解决方案,迈入极速统一时代

StarRocks

数据库

什么是云渲染?《阿凡达》《阿丽塔》告诉你

Finovy Cloud

人工智能 云渲染

中软鸿联:数字为运动蓄能,智能为健康充值

中软国际AIoT开发者社区

智能穿戴 运动健康

真机调试设备不够?荣耀云调试帮你忙

荣耀开发者服务平台

开发者 手机 云服务 荣耀 honor

中软鸿联:集聚智能化能量势场,点燃小家电创新星火

中软国际AIoT开发者社区

智慧家电

NFT 数据基础设施 NFTScan 的产品介绍【科普】

NFT Research

区块链 NFT 数据基础设施

MySQL高级--性能优化之慢日志查询

Java学术趴

10月月更

2022互联网母婴行业用户洞察

易观分析

互联网 母婴

喜迎华诞,openEuler 22.09 正式发布,与1265名开发者共建面向数字基础设施的开源操作系统

openEuler

开源 开源操作系统 open Euler

Qt示例 | 模拟时钟示例 Analog Clock Example

YOLO.

qt 10月月更 C++

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