Ruby 2.5 新特征

Ruby 2.5 新特征 首页 / Ruby入门教程 / Ruby 2.5 新特征

Ruby核心团队传统上已经发布了新版本的Ruby。 来一起看看这个版本有哪些新特征。

Rescue do/end块

如果您需要捕获一个块中的异常, 唯一的方法是将其放在begin/end块中。 现在,您可以捕获所有do/end块内的异常。

(1..5).each do |n|
  do_something(n)
rescue SomeError => e
  puts e
  next
end

已删除lookup

在以前的版本中, 如果Ruby在当前范围内找不到常量, 它会回退到顶级常量, 并发出警告。 在2.5中已更改, 现在这将导致异常。

class Foo; end
class Bar; end

# Ruby 2.4
Foo::Bar
# warning: toplevel constant Bar referenced by Foo::Bar
#=> Bar

# Ruby 2.5
Foo::Bar
# NameError

顺序相反

当打印到控制台时, Ruby将以相反的顺序显示回溯。 您还将以粗体和下划线看到错误消息。 这是一项实验性函数, 并且打印到日志时顺序不会更改。

在进行Rails项目时, 通常需要向后滚动很长一段距离 在回溯中找到那条线 该行显示发生异常的行。 通过反转回溯, 您在导致异常的行上获得上下文 无需向后滚动。

Kernel#yield_self

该方法将对象传递给块 并返回该块返回的值。 

isbn = "0-306-40615-2"

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

Ruby社区有很多人 对Elixir感兴趣的人 因此这可能最终成为一个流行的函数。 

字符串方法

String#-@:对未冻结的字符串进行重复数据删除。

s = - 'foo'  #=> 'foo'
s.frozen?    #=> true

delete_prefix delete_suffix  (以及bang的!版本)

'Mr. Smith'.delete_prefix('Mr. ')      #=> 'Smith'
'Wellington St.'.delete_suffix(' St.') #=> 'Wellington'

grapheme_clusters

s = "a\u0300"       #=> "à"
s.grapheme_clusters #=> ["à"]
s.codepoints        #=> [97, 768]

数组方法

添加了#append #prepend 方法, 分别是#push#unshift的别名。 这些别名已通过ActiveSupport在Rails中引入, 但是很高兴看到它们被引入Ruby。

list = ['b', 'c']  #=> ['b', 'c']
list.prepend('a')  #=> ['a', 'b', 'c']
list.append('d')   #=> ['a', 'b', 'c', 'd']
list               #=> ['a', 'b', 'c', 'd']

哈希方法

添加了#slice #transform_keys , 最初也来自ActiveSupport。

h = { a: 1, b: 2, c: 3, d: 4 }

h.slice(:a, :b)
#=> { a: 1, b: 2 }

h.transform_keys(&:to_s)
#=> {"a"=>1, "b"=>2, "c"=>3, "d"=>4}

Goodbye, ubygems.rb!

这项更改将对您使用Ruby的方式产生零影响, 但是很好奇为什么在stdlib中有一个 ubygems.rb 文件, 所以无涯教程想提一下,因为它已被删除。

Ruby有一个-r 标志,可让您需要一个库, 例如ruby​​ -rmath require 'math'。 rubygems文件的名称为 ubygems.rb 这样该标志可以用作 -rubygems ,而不是-rrubygems 。 从Ruby 1.9开始就不需要此文件, 并且现在已从stdlib中删除。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

快速上手Kotlin开发 -〔张涛〕

MongoDB高手课 -〔唐建法(TJ)〕

数据中台实战课 -〔郭忆〕

分布式系统案例课 -〔杨波〕

代码之丑 -〔郑晔〕

etcd实战课 -〔唐聪〕

零基础实战机器学习 -〔黄佳〕

深入剖析Java新特性 -〔范学雷〕

Web漏洞挖掘实战 -〔王昊天〕

好记忆不如烂笔头。留下您的足迹吧 :)