写点什么

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

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

关注

评论

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

Linux 之父亮相,OpenCloudOS 社区开放日来了

腾讯安全云鼎实验室

Spark ShuffleManager

布兰特

大数据 spark

首批!青藤通过信通院CWPP能力评估检验

青藤云安全

网络安全 主机安全 信通院

Vue-5-模板语法-2

Python研究所

前端 6月月更

新思科技在《 2022 年 Gartner® 应用安全测试关键能力报告》中表现优异 在五个常见用例中荣获最高分

InfoQ_434670063458

新思科技 Gartner 应用安全测试

仅需三步学会使用低代码ThingJS与森数据DIX数据对接

森友小锘

可视化 数字孪生

掌握高性能计算前,我们先了解一下它的历史

华为云开发者联盟

华为云 高性能计算 处理器

Flutter在数字生活的发展与天翼云盘落地实践

flutter 架构 混合应用开发 移动开发 客户端

APICloud可视化开发新手图文教程

YonBuilder移动开发平台

App APICloud 低代码开发 移动端开发 可视化开发

李飞飞:我更像物理学界的科学家,而不是工程师|深度学习崛起十年

OneFlow

人工智能 深度学习 李飞飞 ImageNet

推开混合云市场大门,Lenovo xCloud的破局之道

脑极体

ServerLess Aws Lambda攻击与横向方法研究

火线安全

云安全

第二届征文大赛开奖啦!速来领奖!

InfoQ写作社区官方

热门活动 初夏征文

如何使用物联网低代码平台进行工作表管理?

AIRIOT

低代码 物联网 低代码开发平台

新思科技助力以色列Visuality Systems推进安全“左移”

InfoQ_434670063458

软件开发 代码 新思科技 安全测试 安全左移

改变世界的开发者丨玩转“俄罗斯方块”的瑶光少年

华为云开发者联盟

人工智能 华为云 俄罗斯方块

为什么要开发分布式操作系统

LAXCUS分布式操作系统

分布式计算 分布式存储 超算 云边端协同 分布式操作

攻防演练 | 网络安全“吹哨人”:安全监控

青藤云安全

网络安全 主机安全 攻防演练

【6.3-6.10】精彩博文回顾

InfoQ写作社区官方

优质创作周报

APICloud 5月SDK发版说明

YonBuilder移动开发平台

App 低代码 APICloud 可视化开发

一文带你了解J.U.C的FutureTask、Fork/Join框架和BlockingQueue

华为云开发者联盟

Java 开发 华为云

数据的软删除—什么时候需要?又如何去实现?

翊君

6月月更

2022 年 DevOps 路线图|Medium

观测云

远程办公工具,疫情居家好帮手 | 社区征文

infoQ-LolitaAnn

初夏征文

传统企业在进行信息化升级的过程中,如何做好信息化顶层设计

WorkPlus

搭建在线帮助中心,轻松帮助客户解决问题

小炮

flutter系列之:UI layout简介

程序那些事

flutter 程序那些事 6月月更

华为云鲲鹏DevKit代码迁移实战

乌龟哥哥

6月月更

图像搜索是什么

Geek_e369a5

图像搜索 图像搜索是什么

APICloud可视化开发丨一键生成专业级源码

YonBuilder移动开发平台

App 低代码 可视化 APICloud 移动端开发

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