Ruby 2.6在圣诞节那天发布, 并带来了一些有趣的新函数。 以下是更改内容的快速摘要。 和我以前版本的摘要一样 ( 2.5 , 2.4 , 2.3 ) 我只是总结一下 我觉得最有趣的函数。 有关更改的完整列表, 看看 更改日志。

Endless ranges

引入了新的语法以表示无限范围。 在case语句中匹配范围时,这将很有用。

case n
when 1..9 then 'Single digit'
when 10..99 then 'Two digit'
when 100.. then 'Three or more'
end

以前,(1 ..)将表示为(1..Float ::INFINITY)

Proc,lambda和Method

#>> 和 #<< 方法已添加到 ProcMethod 对象中,以允许将它们组成一个新方法。

square = -> (n) { n * n }
add_2  = -> (n) { n + 2 }(square >> add_2).call(5) #=> 27
(square << add_2).call(5) #=> 49

使用 #>> 操作,数字将首先平方,然后对第一个proc调用的结果执行 add_2。在 #<<的情况下,调用proc的顺序相反。

我希望我们没有两种不同的proc编写方式,而只使用 #>>。但是合成是Ruby的重要补充,它将使我们能够以更具函数性的风格进行编写。

Kernel#then

这不是新函数, 但是Kernel#yield_self的别名 是Ruby 2.5中引入的 并允许我们进行连锁经营 进入这样的管道:

isbn = '978-1-93778-549-9'isbn.gsub('-', '').then { |isbn| URI("#{API_URL}?q=isbn:#{isbn}") }.then { |uri| Net:HTTP.get(uri) }.then { |json_response| JSON.parse(json_response) }.then { |response| response.dig('items', 'volumeInfo') }

Enumerable#chain and Enumerator#+

这会返回一个 Enumerator ::Chain 对象, 它可以作为单个枚举器使用。

(1..3).chain((5..7), [9, 10]).to_a
#=> [1, 2, 3, 5, 6, 7, 9, 10]list = (1..3).each + (5..7) + (9..10)
list.to_a
#=> [1, 2, 3, 5, 6, 7, 9, 10]

合并多个哈希

Hash#merge仅接受了一个参数,直到2.5。 合并两个以上哈希的唯一方法 是将呼叫链接到#merge 。 现在,您可以将多个哈希传递给该方法。

foo = { a: 1 }
bar = { b: 2 }
baz = { c: 3 }foo.merge(bar, baz) #=> { a: 1, b: 2, c: 3 }# ruby 2.5
# foo.merge(bar).merge(baz)

Array#union and Array#difference

这些方法的工作原理与 | 和 & 运算符。不同之处在于它们可以接受多个参数并且更易于链接。

a = [1, 1, 2, 3]
b = [3, 4]a.union(b) #=> [1, 2, 3, 4]
a.difference(b) #=> [1, 1, 2]

Enumerable#to_h

现在,Enumerable#to_h 接受了一个将键映射到值的块。 这使我们能够转换散列 无需使用map创建中间数组, 或使用 reduce 语法。

hash = { foo: 2, bar: 3 }
hash.to_h { |k, v| [k.upcase, v*v] } #=> { FOO: 4, BAR: 9 }# ruby 2.5:
# hash.map { |k, v| [k.upcase, v*v] }.to_h
# hash.reduce({}) { |result, (k, v)| result.merge(k.upcase => v) }

Enumerator::ArithmeticSequence

Enumerator的子类 被介绍来代表 通过调用Step创建的对象 在RangeNumeric对象上。 这使得做类似的事情成为可能 检查序列是否相等。

r1 = (1..10).step(2)
r2 = (1..10).step(2)r1 == r2 #=> true if 2.6, false in 2.5
1.step == (1..).step #=> true

Range 变化

运算符 已作为step的别名添加。 因此(1..10)%2 等效于(1..10).step (2)

(a..b).cover?(x) 检查 a <= x < b,而 (a..b).include?(x) 遍历该范围并检查是否有任何元素等于x。这使我们可以执行以下操作:

case DateTime.now
when Date.today..Date.today+1puts 'matched'
elseputs 'not matched'
end

注意: 在本文的早期版本中, 我在示例中使用了字符串范围。 为了向后兼容, 字符串范围的行为没有改变。

('a'..'c').cover?('bb')   #=> true
('a'..'c').include?('bb') #=> falsecase 'bb'
when 'a'..'c' then 'matched'
else 'not matched'
end
#=> 'not matched'

Kernel exception 关键字

Exception关键字参数 为某些Kernel方法像IntegerFloatSystem。 对于Numeric方法, 我们现在可以传递Exception:false 为了避免在解析无效值时加注, 并返回 nil 

另一方面Kernel#system , 接受exception:true 如果命令以非零退出状态退出 (而不是返回false) 或者命令执行失败 (而不是返回nil )。

Integer('foo', exception: false) #=> nil
Float('foo', exception: false) #=> nilsystem('foo', exception: true) #=> exception

性能提升

性能方面的最大新闻 是一个JIT实现, 叫 MJIT , 被合并为Ruby。 可以启用 使用-jit 标志。

MJIT导致微基准测试的加速, 但还不够成熟 在较大的代码库(如Rails应用程序)中工作。 对于Rails,它甚至比非JIT版本慢。

但是,这是重要的一步 朝着Ruby 3x3目标迈进, 就是让Ruby 3 至少比Ruby 2.0快3倍。 目前,带有JIT的Ruby 2.6是 比2.0快近2.5倍 在Optcarrot基准测试中, 使用哪个 比较性能 Ruby版本 3x3的目标。

除此之外, 第二个垃圾收集堆, 称为瞬时堆, 被介绍了 减少内存使用 并提高了GC速度 寿命短的物体 Proc.call  block.call

其他变化

  • flip flop 运算符最终被弃用, 并可能会在Ruby 3中删除。
  • Bundler现在是默认gem, 因此您不再需要gem安装捆绑程序 安装Ruby之后。 Rubygems 3.0.1也被合并到Ruby中。
  • 添加了Array#filter作为#select的别名。
  • 先前版本的ruby警告 如果您在 begin 块中有一个 else 子句 没有rescue。 这将在2.6中导致语法错误。
beginputs 'begin'
elseputs 'else'
end# Ruby 2.6
#=> foo.rb:5: else without rescue is useless# Ruby 2.5
#=> foo.rb:7: warning: else without rescue is useless
#=> begin
#=> else

链接:https://www.learnfk.com/article-ruby-2-6-features
来源:Learnfk无涯私塾网

Ruby 2.6 新特征介绍相关推荐

  1. ios6:新特征介绍

    关于ios6的一些东西,找到几个不错的博客:iOS6新特征:参考资料和示例汇总 http://www.onevcat.com/tag/wwdc/ 本文来自:iOS6新特征:新特征介绍 下面我们分别来看 ...

  2. 最强工程项目进度计划管理系统Oracle Primavera P6软件最新版本 22.12发布啦,新特征介绍

    目录 一:前言 二:P6 22.12 新特征(EN) 三:P6 22.12 新特征(CN) 一:前言 近日,甲骨文(Oracle)公司发布了最新版本Primavea P6 2022版,最新版本号 22 ...

  3. oracle 记录镜像文件,记录oracle 10g RMAN的一些新特征-介绍了镜像与备份集的区别...

    1.单条命令"backup as copy"进行全数据库镜像拷贝备份: RMAN> run { 2> backup as copy tag "sjh09032 ...

  4. mysql5.7 json特性_mysql5.7新增加的JSON数据类型特征介绍

    mysql5.7新增加的JSON数据类型特征介绍 发布时间:2020-05-13 17:41:41 来源:亿速云 阅读:139 作者:三月 下面一起来了解下mysql5.7新增加的JSON数据类型特征 ...

  5. JDK版本新特性介绍JDK1.6

    JDK1.6新特性介绍 1. Desktop类和SystemTray类 在JDK6中 ,AWT新增加了两个类:Desktop和SystemTray. 前者可以用来打开系统默认浏览器浏览指定的URL,打 ...

  6. 神经网络如何处理测试阶段出现的新特征?面向开放环境特征外推的图学习解决方案...

    ©作者 | 吴齐天 单位 | 上海交通大学 研究方向 | 图神经网络 本文介绍被NeurIPS 2021接收的新工作.我们对一个全新的问题在通用的设定下进行了探索,相关问题定义和方法适用于诸多具体应用 ...

  7. Java线程新特征——Java并发库

    一.线程池   Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定 ...

  8. 利用GBDT模型构造新特征具体方法

    利用GBDT模型构造新特征具体方法 数据挖掘入门与实战  公众号: datadw   实际问题中,可直接用于机器学**模型的特征往往并不多.能否从"混乱"的原始log中挖掘到有用的 ...

  9. 熊猫tv新功能介绍_您应该知道的4种熊猫绘图功能

    熊猫tv新功能介绍 Pandas is a powerful package for data scientists. There are many reasons we use Pandas, e. ...

  10. 为什么NX10帮助功能无法找到HTML,NX10.0 新功能介绍视频教程专辑

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 NX10.0 新功能介绍视频教程专辑 PLM之家NX10.0界面基础新功能--1 NX新界面增强.mp4 PLM之家NX10.0界面基础新功能--2 问题 ...

最新文章

  1. win这个傻逼系统,高PPI上默认的情况下是放大的,放大了之后逻辑分辨率不跟着放大。
  2. C语言程序设计蔺德军,C语言程序设计上机实验与习题解答(第2版)
  3. 湖南大学第十四届ACM程序设计新生杯(重现赛)L-The Digits String (矩阵快速幂)
  4. netbeans6.8_NetBeans IDE 8.0和Java 8的新功能
  5. expect巡检服务器_Shell-批量巡检服务器脚本
  6. 十六、Python操作excel(.xlsx)封装类MyPyExce
  7. UI干货素材|app切换开关模块
  8. pcie inbound、outbound及EP、RC间的互相訪问
  9. postgis java_Postgresql结合postgis使用java的JDBC连接
  10. PLSQLDeveloper下载使用
  11. 单片机c语言编程乘法运算符,单片机C语言编程常用的运算符介绍
  12. cjson构建_cJSON的构造和解析
  13. 汉字字形码是计算机用来实现对汉字的输出,汉字编码字形码
  14. Asp开发中出现“msxml3.dll 错误 ‘800c0005‘系统未找到指定的资源
  15. 基于Matlab的数字水印设计—基于DCT域的水
  16. 多用途手机登录页面模板
  17. android重启自身应用APP
  18. 大白话搞懂什么是同步/异步/阻塞/非阻塞
  19. 笔试 | 数字IC设计之1bit的半加器、全加器实现
  20. win7记事本如何转换html,Win7打开记事本显示乱码是为什么?怎么才能正常?

热门文章

  1. python3简单代码_【Python】Python3纯代码极简教程
  2. POJ 3626 Mud Puddles(超简单BFS)
  3. 关于JAVAFX的鼠标单击事件案例
  4. Cesium中如何获取鼠标单击位置的经纬度
  5. Python轻松实现地图可视化(附详细源码)
  6. 想不想修真鸿蒙源液哪里买,想不想修真悟道茶在哪买
  7. join有哪几种方式?内外连接有什么区别?
  8. 树状数组————(神奇的区间操作)蒟蒻都可以看懂,因为博主就是个蒟蒻...
  9. vector容器操作导致访问vector subscript out of range
  10. 一些实用的学生向脚本(补)