Ruby 2.6.0 的 NEWS

本文档是版本之间所做的用户可见的功能更改列表,不包括错误修复。

请注意,每个条目都非常简短,没有提供背后的原因或参考信息。有关包含所有足够信息的更改完整列表,请参阅 ChangeLog 文件或 Redmine(例如 https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER

自 2.5.0 版本以来的更改

语言更改

核心类更新(仅限突出的)

Array
新方法
修改的方法
  • Array#to_h 现在接受一个块,该块将元素映射到新的键/值对。[功能 #15143]

别名方法
Binding
新方法
  • 添加了 Binding#source_location。[功能 #14230]

    此方法返回绑定的源位置,一个包含 __FILE____LINE__ 的 2 元素数组。传统上,相同的信息可以通过 eval("[__FILE__, __LINE__]", binding) 检索,但我们计划更改此行为,以便 Kernel#eval 忽略绑定的源位置 [Bug #4352]。因此,用户应使用此新引入的方法,而不是 Kernel#eval

Dir
新方法
Enumerable
新方法
  • Enumerable#chain 返回一个枚举器对象,该对象按顺序迭代接收器的元素,然后迭代每个参数的元素。[功能 #15144]

修改的方法
  • Enumerable#to_h 现在接受一个块,该块将元素映射到新的键/值对。[功能 #15143]

别名方法
Enumerator::ArithmeticSequence
  • 这是一个新类,用于表示算术序列的生成器,即由公共差定义的数字序列。它可用于表示类似于 Python 切片的内容。您可以从 Numeric#stepRange#step 获取此类的实例。

Enumerator::Chain
Enumerator::Lazy
别名方法
Enumerator
新方法
  • Enumerator#+ 返回一个枚举器对象,该对象迭代接收器的元素,然后迭代另一个操作数的元素。[功能 #15144]

ENV
修改的方法
  • ENV.to_h 现在接受一个块,该块将名称和值映射到新的键和值。[功能 #15143]

Exception
新选项
Hash
修改的方法
别名方法
IO
新选项
  • 添加了新的模式字符 'x' 以打开文件进行独占访问。[功能 #11258]

Kernel
别名方法
新选项
不兼容的更改
  • Kernel#systemKernel#exec 不关闭非标准文件描述符(:close_others 选项的默认值更改为 false,但我们仍然在我们创建的描述符上设置 FD_CLOEXEC 标志)。[杂项 #14907]

KeyError
新选项
  • KeyError.new 接受 :receiver:key 选项以在 Ruby 代码中设置接收器和键。[功能 #14313]

Method
新方法
Module
修改的方法
NameError
新选项
  • NameError.new 接受一个 :receiver 选项以在 Ruby 代码中设置接收器。[功能 #14313]

NilClass
新方法
  • 添加了 NilClass#=~ 以实现兼容性。[功能 #15231]

NoMethodError
新选项
  • NoMethodError.new 接受一个 :receiver 选项以在 Ruby 代码中设置接收器。[功能 #14313]

Numeric
不兼容的更改
OpenStruct
修改的方法
  • OpenStruct#to_h 现在接受一个块,该块将键和值映射到新的键和值。[功能 #15143]

Proc
新方法
不兼容的更改
  • Proc#call 不再更改 $SAFE。[功能 #14250]

Random
新方法
Range
新方法
  • 添加了 Range#% 实例方法。[功能 #14697]

不兼容的更改
正则表达式/字符串
  • 将 Unicode 版本从 10.0.0 更新到 11.0.0。[特性 #14802]

    这包括重写字形簇 (/X/) 算法,以及对 String#downcase 上的格鲁吉亚语 MTAVRULI 进行特殊处理。

  • 将 Emoji 版本从 5.0 更新到 11.0.0 [特性 #14802]

RubyVM::AbstractSyntaxTree
新方法
RubyVM
新方法
  • RubyVM.resolve_feature_path 标识“require(feature)”将加载的文件。[实验性] [特性 #15230]

字符串
新特性
  • 如果给定块,String#split 会将每个子字符串 yield 到块中。[特性 #4780]

结构体
修改的方法
  • Struct#to_h 现在接受一个块,该块将键和值映射到新的键和值。[特性 #15143]

别名方法
时间
新特性
TracePoint
新特性
  • 支持 “script_compiled” 事件。[特性 #15287]

新方法
修改的方法
  • TracePoint#enable 接受新的关键字“target:”和“target_line:”。[特性 #15289]

Stdlib 更新(仅限未完成的更新)

BigDecimal

更新到 1.4.0 版本。此版本包含多个兼容性问题,详细信息请参见下面的兼容性问题部分。

修改的方法
  • BigDecimal() 接受与 Float() 类似的新关键字“exception:”。

关于最近版本差异的说明

您应该了解 bigdecimal 最近版本之间的差异。请根据以下信息选择合适的 bigdecimal 版本。

  • 1.3.5 的 BigDecimal.new 没有“exception:”关键字。当您指定“-w”选项时,可以看到 BigDecimal.new 的弃用警告。BigDecimal()、BigDecimal.new 和 Object#to_d 方法相同。

  • 1.4.0 的 BigDecimal.new 带有“exception:”关键字。您总是会看到 BigDecimal.new 的弃用警告。Object#to_d 方法与 BigDecimal() 和 BigDecimal.new 不同。

  • 2.0.0 将在发布 Ruby 2.6.0 后不久发布。此版本将没有 BigDecimal.new 方法。

Bundler
  • 将 Bundler 添加到标准库。[特性 #12733]

  • 使用最新的稳定版本 1.17.2。

Coverage

添加了 oneshot_lines 模式。[特性 #15022]

此模式检查“每行是否至少执行过一次”,而不是“每行执行了多少次”。每行的钩子最多触发一次,并且在触发后会删除钩子标志,即它以零开销运行。

新选项
  • :oneshot_lines 关键字参数添加到 Coverage.start。

  • :stop:clear 关键字参数添加到 Coverage.result。如果 clear 为 true,则会将计数器清零。如果 stop 为 true,则禁用覆盖率测量。

新方法
  • Coverage.line_stub,这是一个简单的辅助函数,用于从给定的源代码创建行覆盖率的“存根”。

CSV
ERB
新选项
  • :trim_mode:eoutvar 关键字参数添加到 ERB.new。现在,第一个参数之外的非关键字参数将被软弃用,并在 Ruby 2.5 成为 EOL 时删除。[特性 #14256]

  • erb 命令的 -S 选项已弃用,并将在下一个版本中删除。

FileUtils
新方法
  • FileUtils#cp_lr。[特性 #4189]

Matrix
新方法
  • Matrix#antisymmetric?, Matrix#skew_symmetric?

  • Matrix#map!, Matrix#collect! [特性 #14151]

  • Matrix#[]=

  • Vector#map!, Vector#collect!

  • Vector#[]=

Net
新选项
  • :write_timeout 关键字参数添加到 Net::HTTP.new。[特性 #13396]

新方法
  • 添加 Net::HTTP#write_timeout 和 Net::HTTP#write_timeout=。[特性 #13396]

新常量
  • 添加 Net::HTTPClientException 以弃用 Net::HTTPServerException,其名称具有误导性。[Bug #14688]

NKF
  • 升级到 nkf v2.1.5

Psych
  • 升级到 Psych 3.1.0

RDoc
  • 速度大约快 2 倍。

  • 使用 SOURCE_DATE_EPOCH 生成文件。

  • 修复了偏移的方法行号。

  • 启用被忽略的 --width--exclude--line-numbers

  • 添加对默认标记符号中 “>>>” 引用的块的支持。

  • 添加对 TomDoc 符号中 “Raises” 行的支持。

  • 修复语法错误输出。

  • 修复了许多解析错误。

REXML
改进了一些 XPath 实现
  • concat() 函数:在连接之前字符串化所有参数。

  • string() 函数:支持上下文节点。

  • string() 函数:支持处理指令节点。

  • 在 XPath 2.0 中支持 "*:#{ELEMENT_NAME}" 语法。

修复了一些 XPath 实现
  • "//#{ELEMENT_NAME}[#{POSITION}]" 情况

  • string() 函数:修复 function(document) 返回超出根元素的节点。

  • "/ #{ELEMENT_NAME} " 情况

  • "/ #{ELEMENT_NAME} [ #{PREDICATE} ]" 情况

  • "/ #{AXIS}::#{ELEMENT_NAME}" 情况

  • "#{N}-#{M}" 情况:在 "-" 之前需要一个或多个空格

  • "/child::node()" 情况

  • "#{FUNCTION}()/#{PATH}" 情况

  • "@#{ATTRIBUTE}/parent::" 情况

  • "name(#{NODE_SET})" 情况

RSS
新选项
  • RSS::Parser.parse 现在接受 Hash 类型的选项。可以使用 :validate:ignore_unknown_element:parser_class 选项。

RubyGems
Set
别名方法
  • Set#filter! 是 Set#select! 的新别名。[特性 #13784]

URI
新常量
  • 添加 URI::File 以处理文件 URI 方案。[特性 #14035]

兼容性问题(不包括功能错误修复)

Dir
  • 带有 '\0' 分隔模式列表的 Dir.glob 将被弃用,并且现在会发出警告。[特性 #14643]

文件
对象
  • Object#=~ 已弃用。[特性 #15231]

Stdlib 兼容性问题(不包括功能错误修复)

BigDecimal
  • 以下方法已删除。

    • BigDecimal.allocate

    • BigDecimal.ver

  • 每个 BigDecimal 对象都是冻结的。[特性 #13984]

  • BigDecimal() 解析给定的字符串,类似于 Float()。

  • String#to_d 解析接收器字符串,类似于 String#to_f

  • BigDecimal.new 将在 2.0 版本中删除。

Pathname
  • Pathname#read、Pathname#binread、Pathname#write、Pathname#binwrite、Pathname#each_line 和 Pathname#readlines 即使路径以管道字符 '|' 开头,也不会调用外部命令。这遵循 [特性 #14245]。

实现改进

杂项更改