NEWS for Ruby 2.6.0

本文件列出了版本之间用户可见的功能变更,不包括错误修复。

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

自 2.5.0 版本以来的更改

语言更改

核心类更新(仅突出显示)

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

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

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

目录
新方法
可枚举
新方法
  • Enumerable#chain 返回一个枚举器对象,它依次遍历接收者的元素,然后遍历每个参数的元素。[特性 #15144]

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

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

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

Enumerator::Lazy
别名方法
枚举器
新方法
  • Enumerator#+ 返回一个枚举器对象,它遍历接收者的元素,然后遍历另一个操作数的元素。[特性 #15144]

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

异常
新选项
哈希
修改后的方法
别名方法
IO
新选项
  • 添加了新的模式字符 'x' 用于以独占方式打开文件。[功能 #11258]

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

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

方法
新方法
模块
修改后的方法
NameError
新选项
  • NameError.new 接受 :receiver 选项,用于在 Ruby 代码中设置接收者。[功能 #14313]

NilClass
新方法
  • NilClass#=~ 已添加以确保兼容性。[功能 #15231]

NoMethodError
新选项
  • NoMethodError.new 接受 :receiver 选项,用于在 Ruby 代码中设置接收者。[功能 #14313]

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

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

随机数
新方法
范围
新方法
  • 添加了 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 如果给出,则将每个子字符串传递给块。[特性 #4780]

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

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

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

标准库更新(仅突出显示)

BigDecimal

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

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

关于最近版本差异的说明

您可能需要了解 bigdecimal 最近版本的差异。请根据以下信息选择合适的 bigdecimal 版本。

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

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

Coverage

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

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

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

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

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

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

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

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

  • Matrix#map!, Matrix#collect! [功能 #14151]

  • Matrix#[]=

  • Vector#map!, Vector#collect!

  • Vector#[]=

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

新方法
新常量
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
集合
别名方法
URI
新常量
  • 添加 URI::File 来处理文件 URI 方案。[特性 #14035]

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

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

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

标准库兼容性问题(不包括特性错误修复)

BigDecimal
  • 以下方法已删除。

    • BigDecimal.allocate

    • BigDecimal.ver

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

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

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

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

路径名

实现改进

其他更改