NEWS for Ruby 2.6.0

本文档是除 bug 修复之外,在版本发布之间所做的用户可见功能更改的列表。

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

自 2.5.0 版本以来的更改

语言更改

核心类更新(仅列出重要的更新)

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

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

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

Dir
新方法
Enumerable
新方法
  • Enumerable#chain 返回一个枚举器对象,该对象依次遍历接收者的元素和每个参数的元素。[Feature #15144]

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

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

Enumerator::Chain
  • 这是一个新的类,用于表示可枚举对象的链,它作为一个单一的枚举器工作,由 Enumerable#chainEnumerator#+ 等方法生成。

Enumerator::Lazy
别名方法
Enumerator
新方法
  • Enumerator#+ 返回一个枚举器对象,该对象依次遍历接收者和其他操作数中的元素。[Feature #15144]

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

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

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

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

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

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

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

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

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

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

不兼容的更改
Regexp/String
  • 将 Unicode 版本从 10.0.0 更新到 11.0.0。[Feature #14802]

    这包括重写了 String#downcase 的字素簇 (/X/) 算法和格鲁吉亚语 MTAVRULI 的特殊大小写处理。

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

RubyVM::AbstractSyntaxTree
新方法
RubyVM
新方法
  • RubyVM.resolve_feature_path 识别将由“require(feature)”加载的文件。[experimental] [Feature #15230]

String
新功能
  • String#split 如果给定块,则将每个子字符串传递给该块。[Feature #4780]

Struct
修改后的方法
  • Struct#to_h 现在接受一个将键和值映射到新键和值的块。[Feature #15143]

别名方法
Time
新功能
TracePoint
新功能
  • 支持“script_compiled”事件。[Feature #15287]

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

标准库更新(仅列出重要的更新)

BigDecimal

升级到版本 1.4.0。此版本包含一些兼容性问题,有关详细信息,请参阅下面的兼容性问题部分。

修改后的方法
  • BigDecimal() 接受新的关键字参数“exception:”,类似于 Float()。

关于近期版本之间差异的说明

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

Bundler
  • Bundler 添加到标准库。[Feature #12733]

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

Coverage

添加了一个 oneshot_lines 模式。[Feature #15022]

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

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

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

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

CSV
ERB
新选项
  • ERB.new 添加 :trim_mode:eoutvar 关键字参数。现在,第一个参数以外的非关键字参数已软弃用,将在 Ruby 2.5 EOL 后移除。[Feature #14256]

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

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

  • Matrix#map!, Matrix#collect! [Feature #14151]

  • Matrix#[]=

  • Vector#map!, Vector#collect!

  • Vector#[]=

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

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

NKF
  • 升级到 nkf v2.1.5

Psych
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
别名方法
URI
新常量
  • 添加 URI::File 以处理文件 URI 方案。[Feature #14035]

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

Dir
  • 带有 '\0' 分隔模式列表的 Dir.glob 已弃用,现在会发出警告。[Feature #14643]

File
Object
  • Object#=~ 已弃用。[Feature #15231]

标准库兼容性问题(不包括功能 bug 修复)

BigDecimal
  • 以下方法已被移除。

    • BigDecimal.allocate

    • BigDecimal.ver

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

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

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

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

Pathname

实现改进

杂项更改