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 忽略绑定的源位置 [Bug #4352]。因此,用户应该使用这个新引入的方法而不是 Kernel#eval

目录
新方法
可枚举
新方法
  • Enumerable#chain 返回一个枚举器对象,它按顺序迭代接收器的元素,然后迭代每个参数的元素。[特性 #15144]

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

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

Enumerator::Chain
  • 这是一个新的类,用于表示可枚举对象的链,它作为一个单独的可枚举对象工作,由诸如 Enumerable#chainEnumerator#+ 之类的函数生成。

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

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

Exception
新选项
Hash
修改后的方法
别名方法
IO
新选项
  • 为打开文件以进行独占访问添加了新的模式字符 'x'。[特性 #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]

    这包括对 grapheme cluster (/X/) 算法的重写,以及对 String#downcase 上的格鲁吉亚 MTAVRULI 的特殊情况处理。

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

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

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

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

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

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

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

BigDecimal

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

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

关于不同版本之间的差异的说明

您可能想知道不同版本的 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 为真,则将计数器清零。如果 stop 为真,则禁用覆盖率测量。

新方法
  • 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,其名称具有误导性。[错误 #14688]

NKF
  • 升级到 nkf v2.1.5

Psych
  • 升级到 Psych 3.1.0

RDoc
  • 速度提升约两倍。

  • 使用 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.glob 使用 '\0' 分隔的模式列表将被弃用,现在会发出警告。[功能 #14643]

File
Object
  • Object#=~ 已被弃用。[功能 #15231]

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

BigDecimal
  • 以下方法已移除。

    • BigDecimal.allocate

    • BigDecimal.ver

  • 所有 BigDecimal 对象都被冻结。[功能 #13984]

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

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

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

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

实现改进

其他变更