写点什么

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

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

关注

评论

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

JUC整理笔记四之梳理VarHandle(上)

JFound

Java

设计模式:建造者设计模式

毛佳伟🐳

不忘初心,继续努力

一周思进

ARTS 打卡计划

Django ListView DetailView等基于类的视图如何添加装饰器?

BigYoung

Python django LiveView 装饰器

只需CSS的下拉式导航菜单

寇云

CSS css3

平台化服务的基石:权限模型设计

孤岛旭日

企业架构 用户权限 数据建模

毫无意义的人生唯有编织图案

xyz

关于字符编码那些你应该知道的事情

꯭🇫꯭

Java MySQL emoji utf-8 ASCII

【CSS】为什么a标签的伪类选择器要注意书写顺序?

德育处主任

CSS html css3 大前端 Web

ARTS-week-1

youngitachi

ARTS 打卡计划 arts

大厂为什么不招30岁以上程序员,看这篇就够了

金刚小书童

程序员 职业规划 技术管理 职业成长

Spring Bean生命周期——初始化和销毁

xiaoxi666

Java spring

vue-router 容易被忽视的几个地方

꯭🇫꯭

Vue vuejs vue-router router

恭喜你,赢得了爱情长跑的胜利

小天同学

爱情 兄弟 祝福

Spring源码

云淡风轻

spring 源码

Vol.10 Java 25岁了!

pyfn2030

Java jdk 编程语言 Java25周年

写给产品经理的信(6):时间管理

punkboy

极客时间,项目管理 职场 产品经理 时间分配 时间管理

SpringBoot之多模块开发

北漂码农有话说

python实现·十大排序算法之桶排序(Bucket Sort)

南风以南

Python 排序算法 桶排序

2020年5月30日 泛型程序设计

瑞克与莫迪

图片与标题的Ken Burns动效

寇云

CSS css3

贴吧电纸书资深用户,从7个方面详谈BOOX Poke2上手体验!

DT极客

一位测试工程师的自我介绍

姬翔

测试

广告的发展历程

子悠

广告 计算广告 广告系统 互联网广告 RTB

如何存储1个二进制位&锁存器的核心和本质

姜海天

计算机 数字逻辑

Cassandra可调一致性的使用及原理

老任物联网杂谈

大数据 分布式 Cassandra 可调一致性

终于找到了一篇文章!通俗地讲解计算机工作原理

图灵社区

cpu 存储器 编译器 计算机工作原理

谈谈控制感(11):这样提升控制感,谁都能做到

史方远

心理 成长

面试都在问的微服务、服务治理、RPC、下一代微服务框架... 一文带你彻底搞懂!

程序员柠檬

微服务 后台开发 架构设计

产业区块链:产业是本质,区块链是工具

CECBC

新基建 CECBC 区块链技术 中国电子

Vite for Vue 是什么?

꯭🇫꯭

Vue vuejs vite Vue3

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