写点什么

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

2016 年 7 月 03 日

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 年 7 月 03 日 19:006926
用户头像

发布了 217 篇内容, 共 52.6 次阅读, 收获喜欢 70 次。

关注

评论

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

渣硕试水字节跳动,本以为简历都过不了,123+HR面直接拿到意向书

云流

Java 编程 程序员 架构 面试

区块链通证经济——资产流动性的变革

CECBC区块链专委会

资产流动性

阿里二面,面试官居然把 TCP 三次握手问的这么细致

程序员肖邦

面试 TCP 三次握手 四次挥手

MySQL-技术专题-知识点介绍

李浩宇/Alex

MySQL

Vue3源码 | 如何挂载组件元素?

梁龙先森

源码分析 Vue3 前端进阶

管理者如何才能不亲力亲为?

石云升

项目管理 28天写作 职场经验 管理经验 3月日更

Redis - AOF

insight

redis 3月日更

Go Modules 常见使用陷阱

Rayjun

go go modules

Redis 内存碎片清理

escray

redis 极客时间 学习笔记 3月日更 Redis 核心技术与实战

排序

在即

28天写作 28天挑战 3月日更

LeetCode链表专题01: 反转链表

小马哥

Java 链表 LeetCode 数据结构与算法 七日更

mysql实现主主数据库(双机热备)

大奎

K8s各节点常用命令

happlyfox

学习 k8s 3月日更

软件工程笔记:学习方法

风翱

软件工程 笔记 3月日更

Wireshark数据包分析学习笔记Day24

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

那些不得不知的缓存知识

云流

Java 缓存 程序员 面试

设计与思考,关于资源和生命周期(三)

程序员架构进阶

设计模式 架构设计 28天写作 3月日更 池化技术

Kubernetes Ingress 可视化编辑器

倪朋飞

Kubernetes 网络

初识Golang之条件语句

Kylin

golang新手 基础语法 3月日更

架构学习 笔记 2

felix徐

极客时间·产品训练营·第八周作业

二大爷

极客大学产品经理训练营

什么?你居然还不知道Docker是什么?看看京东首席架构师怎么说的

互联网架构师小马

Docker 容器

10年后端开发程序员精心整理「C/C++ Linux服务器」 成长路线(附思维导图)

Linux服务器开发

Linux C/C++ 后端开发 Linux服务器开发 Linux后台开发

火爆全网!2021年最新发布Java面试清单(九大技术点)

比伯

Java 程序员 架构 程序人生 架构师

一篇文章让你彻彻底底理解 I/O 多路复用

云流

Java 程序员 架构 面试 计算机

京东资深架构师带你深入理解 Spring Cloud 核心组件与底层原理

互联网架构师小马

一束光的旅程

脑极体

周小川:数字货币将是下一代货币研究工作的核心

CECBC区块链专委会

数字货币

区块链如何助力中小企业解决融资难题

CECBC区块链专委会

区块链

Kubernetes 弃用 Docker 后如何切换到 Containerd

倪朋飞

Docker Kubernetes 微服务

使用雪花 id 或 uuid 作为 MySQL 主键,被老板怼了一顿!

Java小咖秀

MySQL 数据库 雪花算法 uuid 雪花id

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

编译系统设计赛(华为毕昇杯)技术报告会|5月1日

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