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

Dir
新方法
Enumerable
新方法
  • 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 标志)。[杂项 #14907]

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

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

NilClass
新方法
NoMethodError
新选项
  • NoMethodError.new 接受 :receiver 选项以在 Ruby 代码中设置接收器。[特性 #14313]

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

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

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

不兼容的更改
Regexp/String
  • 将 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
新特性
  • 如果给定块,String#split 会将每个子字符串传递给该块。[特性 #4780]

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

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

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

标准库更新(仅限未完成的)

BigDecimal

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

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

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

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

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
新方法
Matrix
新方法
  • Matrix#antisymmetric?, Matrix#skew_symmetric?

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

  • Matrix#[]=(

  • Vector#map!, Vector#collect!

  • Vector#[]=

Net
新选项
  • :write_timeout 关键字参数添加到 Net::HTTP.new。[特性 #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
Set
别名方法
URI
新常量
  • 添加 URI::File 以处理文件 URI 方案。[特性 #14035]

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

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

实现改进

其他更改