写点什么

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

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

关注

评论

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

小令动态丨令牌云获中国金融科技·最佳新锐企业奖

令牌云数字身份

创新大赛 金融科技创新

一个小故事带你了解 Spring IoC

lambochen

Java踩坑之三目运算符类型转换

lambochen

CleanMyMac4.12.4最新版本有哪些新功能?

茶色酒

CleanMyMac CleanMyMac X2023

C++缺省参数:学习成为一名优秀的舔狗

子夜的星

c++ 缺省参数 编程语言、 基础语法

NFT元宇宙链游游戏项目系统开发技术解析(Demo)

I8O28578624

DAPP/去中心化系统开发流程解析方案(成熟理念)分析结果

I8O28578624

如何让Java编译器帮你写代码

京东科技开发者

后端 编译器 java; 编译器原理 企业号 1 月 PK 榜

30+亮眼指标,看看2022年嘉为蓝鲸的逆势创新之路!

嘉为蓝鲸

自动化运维 嘉为蓝鲸 2022大事件

启科 QuTrunk+Runtime+QuSaaS+亚马逊云科技量子计算编程实战

亚马逊云科技 (Amazon Web Services)

Python 量子计算 Amazon EC2 Hero 专栏 Amazon Braket

Mockito 助你实现真正的单元测试

lambochen

【译】5 Different Ways to Create Objects in Java

lambochen

佛萨奇2.0系统开发解析逻辑教程方案(成熟技术)

I8O28578624

流程的作用是服务于业务,所有不能被用来帮业务部门好好打粮食的流程,都不是好流程!

CTO技术共享

流程的价值一,固化业务的最佳实践!

CTO技术共享

嘉为蓝鲸IT服务管理解决方案入选2022广东省政务服务创新解决方案

嘉为蓝鲸

自动化运维 嘉为蓝鲸 IT服务管理中心

深入理解跨域和最佳实践分享

Crazy Urus

面试 前端 HTTP 跨域

软件测试/测试开发 | 接口自动化测试中,文件上传该如何测试?

测试人

软件测试 自动化测试 接口测试 测试开发 文件上传

栉风沐雨 韧性前行 | 2022年九科大事件

九科Ninetech

RPA 超自动化 流程挖掘

Pipy 0.90.0 发布

Flomesh

多线程并发 Pipy 流量管理

在可观测性的启蒙与初试探--快速实现根因分析/业务大盘

Yestodorrow

架构 监控 可观测性

Redis缓存的主要异常及解决方案

京东科技开发者

数据库 缓存 缓存击穿 Redis 数据结构 企业号 1 月 PK 榜

浅谈区块链项目开发技术(Solidity成熟语言)

I8O28578624

什么是NFT链游项目游戏系统开发技术(Demo)采用Solidity 智能合约系统开发方案

I8O28578624

比Postman更懂中国程序员,Apipost真香!

不想敲代码

接口测试 API 研发管理工具

人人都在聊的云原生数据库Serverless到底是什么?

华为云开发者联盟

数据库 Serverless 云原生 华为云 GaussDB

MySQL 主从备份实践

lambochen

编译期多态

SkyFire

c++ 多态

高效学 C++|继承与组合

TiAmo

c++ 编程语言 继承

智能合约DAPP项目系统开发技术逻辑(dEOM)

I8O28578624

谈谈enabled_shared_from_this

SkyFire

c++ 智能指针

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