NEWS for Ruby 2.4.0¶ ↑
本文件列出了版本之间发布的用户可见功能更改,不包括错误修复。
请注意,每个条目都保持非常简短,没有提供任何原因或参考信息。有关包含所有充分信息的完整更改列表,请参阅 ChangeLog 文件或 Redmine(例如:https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER
)
自 2.3.0 版本以来的更改¶ ↑
语言更改¶ ↑
-
现在允许在条件表达式中使用多重赋值。[功能 #10617]
-
在方法中通过
Symbol#to_proc
启用 Refinements。[特性 #9451] -
通过 Kernel#send 和 BasicObject#__send__ 启用 Refinements。[特性 #11476]
-
Rescue 修饰符现在适用于方法参数。[特性 #12686]
-
现在允许顶层返回。[特性 #4840]
核心类更新(仅突出显示的更新)¶ ↑
-
-
Array#concat
[特性 #12333]现在接受多个参数。
-
Array#max
和Array#min
。[特性 #12172]这可能会导致微小的不兼容性:如果您重新定义了
Enumerable#max
并对Array
调用 max,您的重新定义现在将被忽略。您还应该重新定义Array#max
。 -
Array#pack
[特性 #12754]现在接受可选参数 'buffer:' 以重用已分配的缓冲区。
-
Array#sum
[特性 #12217]这与
Enumerable#sum
不同,因为Array#sum
不依赖于每个方法的定义。
-
-
-
Comparable#clamp
。[特性 #10594]
-
-
-
Dir.empty?
。[特性 #10121]
-
-
-
在没有块的情况下调用的
Enumerable#chunk
现在返回一个Enumerator
[特性 #2172] -
Enumerable#sum
[特性 #12217] -
Enumerable#uniq
[特性 #11090]
-
-
-
Enumerator::Lazy#chunk_while
[GH-1186] -
Enumerator::Lazy#uniq
[特性 #11090]
-
-
-
File.empty?
。[特性 #9969]
-
-
-
Float#ceil
、Float#floor
和Float#truncate
现在接受可选的数字,以及Float#round
。[特性 #12245] -
Float#round
现在接受可选的关键字参数,half 选项,默认行为是向上取整。[Bug #12548] [Bug #12958] half 选项可以是 :even、:up 和 :down 之一。[特性 #12953]
-
-
-
Hash#compact
和Hash#compact!
[特性 #11818] -
Hash#transform_values
和Hash#transform_values!
[特性 #12512]
-
-
-
Fixnum 和 Bignum 统一为
Integer
[特性 #12005] -
Integer#ceil
,Integer#floor
和Integer#truncate
现在接受可选的 digits 参数,与Integer#round
一致。[特性 #12245] -
Integer#digits
用于提取位值表示法的列 [特性 #12447] -
Integer#round
现在接受可选的关键字参数 half option,默认行为现在是向上取整。[Bug #12548] [Bug #12958]half option 可以是 :even,:up 和 :down 之一。[特性 #12953]
-
-
-
IO#gets
,IO#readline
,IO#each_line
,IO#readlines
,IO.foreach
现在接受可选的关键字参数 chomp flag。[特性 #12553]
-
-
-
Kernel#clone
现在接受可选的关键字参数 freeze flag。[特性 #12300]
-
-
-
MatchData#named_captures
[特性 #11999] -
MatchData#values_at
支持命名捕获 [特性 #9179]
-
-
-
Module#refine
现在接受模块作为参数。[特性 #12534] -
Module.used_modules
[特性 #7418]
-
-
-
Numeric#finite?
,Numeric#infinite?
[特性 #12039]
-
-
-
支持 CLOCK_MONOTONIC_RAW_APPROX,CLOCK_UPTIME_RAW 和 CLOCK_UPTIME_RAW_APPROX,这些是 macOS 10.12 中引入的。
-
-
-
Rational#round
现在接受可选的关键字参数 half option,默认行为现在是向上取整。[Bug #12548] [Bug #12958] half option 可以是 :even,:up 和 :down 之一。[特性 #12953]
-
-
-
元字符 X 匹配 Unicode 9.0 字符,并对 UTR #51 Unicode Emoji,Version 4.0 emoji zwj 序列进行了一些变通处理。
-
Regexp#match?
[特性 #8110]此方法返回布尔值,不保存反向引用。
-
更新至 Onigmo 6.0.0。
-
-
Regexp/String: 将 Unicode 版本从 8.0.0 更新至 9.0.0 [特性 #12513]
-
RubyVM::Env
-
RubyVM::Env 已被移除。
-
-
-
String#casecmp?
[特性 #12786] -
String#concat
,String#prepend
[特性 #12333]现在接受多个参数。
-
String#each_line
,String#lines
现在接受一个可选的关键字参数,chomp 标志。[特性 #12553] -
String#match?
[特性 #12898] -
String#unpack1
[特性 #12752] -
String#upcase
,String#downcase
,String#capitalize
,String#swapcase
以及它们的 bang 变体现在支持所有 Unicode 字符,不再局限于 ASCII。支持的编码包括 UTF-8、UTF-16BE/LE、UTF-32BE/LE 和 ISO-8859-1~16。可以使用选项进行变体。有关详细信息,请参阅String#downcase
的文档。[特性 #10085] -
String.new
(capacity: size) [特性 #12024]
-
-
StringIO
-
StringIO#gets, StringIO#readline, StringIO#each_line, StringIO#readlines 现在接受一个可选的关键字参数,chomp 标志。[特性 #12553]
-
-
-
Symbol#casecmp?
[特性 #12786] -
Symbol#match
现在返回MatchData
。[Bug #11991] -
Symbol#match?
[特性 #12898] -
Symbol#upcase
,Symbol#downcase
,Symbol#capitalize
, 和Symbol#swapcase
现在支持所有 Unicode 字符。有关详细信息,请参阅String#downcase
的文档。[特性 #10085]
-
-
-
Thread#report_on_exception
和Thread.report_on_exception
[特性 #6647]
-
-
-
TracePoint#callee_id
[特性 #12747]
-
-
-
引入了名为
Warning
的新模块。默认情况下,它只有一个单例方法,名为 warn。这使得第三方库可以控制处理警告的方式。[功能 #12299]
-
标准库更新(仅突出显示的更新)¶ ↑
-
CGI
-
不允许使用 , 作为分隔符 [Bug #12791]
-
-
CSV
-
添加 liberal_parsing 选项。[功能 #11839]
-
-
IPAddr
-
IPAddr#== 和 IPAddr#<=> 在强制转换失败时不再引发异常。[Bug #12799]
-
-
IRB
-
Binding#irb: 在 r56624 中启动类似于 'binding.pry` 的 REPL 会话。
-
-
Logger
-
允许在构造函数中指定日志记录器参数,例如级别、程序名、日期时间格式、格式化程序。[功能 #12224]
-
添加 shift_period_suffix 选项。[功能 #10772]
-
-
Net::HTTP
-
新方法:Net::HTTP.post [功能 #12375]
-
-
Net::FTP
-
支持 TLS (RFC 4217)。
-
支持 Net::FTP.new 的哈希样式选项。
-
为 Net::FTP#status 添加一个新的可选参数 pathname。由 soleboxy 贡献。[GH-1478] [功能 #12965]
-
-
OpenSSL
-
包含 Ruby/OpenSSL 2.0。OpenSSL 现已作为 Gem 提取,并在一个单独的存储库中维护:github.com/ruby/openssl。它仍然是“默认 gem”。[功能 #9612] 有关完整的发行说明,请参阅 ext/openssl/History.md。
-
-
optparse
-
添加 into 选项。[功能 #11191]
-
-
pathname
-
新方法:Pathname#empty? [功能 #12596]
-
-
Readline
-
Readline.quoting_detection_proc 和 Readline.quoting_detection_proc= [功能 #12659]
-
-
REXML
-
set
-
新方法:Set#compare_by_identity 和 Set#compare_by_identity?。[功能 #12210]
-
-
WEBrick
-
不允许使用 , 作为分隔符 [Bug #12791]
-
兼容性问题(不包括功能错误修复)¶ ↑
-
Array#sum
和Enumerable#sum
已实现。[功能 #12217]Ruby 本身没有兼容性问题,因为 Ruby 在 2.4 版本之前没有为数组提供 sum 方法。但是,许多第三方 gem,例如 activesupport、facets、simple_stats 等,都定义了 sum 方法。这些实现大多兼容,但存在细微差异。Ruby 的 sum 方法应该基本兼容,但不可能与所有第三方实现完全兼容。
-
Fixnum 和 Bignum 统一为
Integer
[特性 #12005]Fixnum 类和 Bignum 类已被移除。
Integer
类已从抽象类更改为具体类。例如,0 是 Integer 的实例:0.class 返回Integer
。常量 Fixnum 和 Bignum 被绑定到Integer
。因此,obj.kind_of?(Fixnum) 等同于 obj.kind_of?(Integer
)。在 C 级,Fixnum 对象和 Bignum 对象应通过 FIXNUM_P(obj) 和 RB_TYPE_P(obj, T_BIGNUM) 区分。RUBY_INTEGER_UNIFICATION 可用于在 C 级检测此功能。0.class ==Integer
可用于在 Ruby 级检测此功能。C 级常量 rb_cFixnum 和 rb_cBignum 已被移除。它们会导致编译失败。 -
String/Symbol#upcase/downcase/swapcase/capitalize(!) 现在适用于所有 Unicode 字符,而不仅仅是 ASCII 字符。[功能 #10085]
如果数据本来就在 ASCII 中,或者对 ASCII 的限制只是在等待更广泛的实现时被容忍,则无需更改。如果处理 Unicode 数据,但操作必须仅限于 ASCII,则需要更改(使用 :ascii 选项)。国际化域名就是一个很好的例子。
-
TRUE / FALSE / NIL
这些常量现在已过时。[功能 #12574] 请改用 true / false / nil。
标准库兼容性问题(不包括功能错误修复)¶ ↑
-
DateTime
-
DateTime#to_time 现在保留时区。[错误 #12189]
-
-
Psych
-
更新到 Psych 2.2.2
-
-
-
更新到
RDoc
5.0.0
-
-
RubyGems
-
更新到 RubyGems 2.6.8
-
-
shellwords
-
Shellwords.shellwords (shellsplit) 仅在反斜杠后跟以下字符之一时才将反斜杠视为转义字符:$ ‘ “ \ <newline> [错误 #10055]
-
-
-
Time#to_time 现在保留时区。[错误 #12271]
-
-
thread
-
扩展库已被移除。在 2.0 版本之前,它是一个纯 Ruby 脚本“thread.rb”,优先于“thread.so”,并且从 2.1 版本开始已在 $LOADED_FEATURES 中提供。
-
-
Tk
-
Tk 已从标准库中移除。[功能 #8539]
github.com/ruby/tk 是新的上游。
-
-
XMLRPC
-
XMLRPC 已从标准库中移除,并作为 gem 捆绑。[功能 #12160]
github.com/ruby/xmlrpc 是新的上游。
-
-
Zlib
-
Zlib.gzip 和 Zlib.gunzip [功能 #13020]
-
C API 更新¶ ↑
-
如果 RUBY_SHOW_COPYRIGHT_TO_DIE 设置为 0,ruby_show_version() 将不再退出进程。这将在未来成为默认设置。
-
rb_gc_adjust_memory_usage() [功能 #12690]
支持的平台变更¶ ↑
-
不再支持 FreeBSD < 4
实现改进¶ ↑
-
在某些情况下,`[x, y].max` 和 `[x, y].min` 进行了优化,因此不会创建临时数组。具体条件是实现细节:目前,数组字面量不能有 splat,必须至少有一个表达式,但必须是字面量,长度必须 <= 0x100,并且
Array#max
和 min 不能被重新定义。它将在大多数随意和现实生活中使用的情况下工作,其中它被有意地写成 `Math.max(x, y)`。 -
Thread
死锁检测现在显示了它们的回溯和依赖关系。[功能 #8214] -
st_table (st.c) 内部数据结构已改进。[功能 #12142]
-
Rational
已得到广泛优化。[功能 #12484]
其他变更¶ ↑
-
ChangeLog 已从存储库中删除。
它是通过 `make dist` 从 Subversion 中的提交消息生成的。另请注意,现在人们应该遵循 Git 风格的提交消息。模板写在了 更改的简短(不超过 50 个字符)摘要 中。[功能 #12283]