Ruby 2.4.0 的 NEWS¶ ↑
本文档列出了版本之间用户可见的功能变更,不包括错误修复。
请注意,每个条目都非常简短,没有提供背后的原因或参考信息。有关包含所有足够信息的完整变更列表,请参阅 ChangeLog 文件或 Redmine (例如 https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER
)
自 2.3.0 版本以来的变更¶ ↑
语言变更¶ ↑
-
现在允许在条件表达式中使用多重赋值。[Feature #10617]
-
现在可以使用
Symbol#to_proc
在方法中启用 Refinements。[Feature #9451] -
可以使用 Kernel#send 和
BasicObject#__send__
启用 Refinements。[Feature #11476] -
现在可以将 Rescue 修饰符应用于方法参数。[Feature #12686]
-
现在允许顶层 return。[Feature #4840]
核心类更新 (仅列出重要的更新)¶ ↑
-
-
Array#concat
[Feature #12333]现在可以接受多个参数。
-
Array#max
和Array#min
。[Feature #12172]这可能会导致轻微的不兼容:如果重新定义了
Enumerable#max
并调用数组的 max 方法,则您的重新定义将被忽略。您还应该重新定义Array#max
。 -
Array#pack
[Feature #12754]现在接受可选参数 ‘buffer:’ 以重用已分配的缓冲区。
-
Array#sum
[Feature #12217]这与
Enumerable#sum
不同,因为Array#sum
不依赖于 each 方法的定义。
-
-
-
Comparable#clamp
。[Feature #10594]
-
-
-
Dir.empty?
。[Feature #10121]
-
-
-
不带块调用的
Enumerable#chunk
现在返回一个Enumerator
[Feature #2172] -
Enumerable#sum
[Feature #12217] -
Enumerable#uniq
[Feature #11090]
-
-
-
Enumerator::Lazy#chunk_while
[GH-1186] -
Enumerator::Lazy#uniq
[Feature #11090]
-
-
-
File.empty?
。[Feature #9969]
-
-
-
现在
Float#ceil
、Float#floor
和Float#truncate
可以接受可选的位数,就像Float#round
一样。[Feature #12245] -
现在
Float#round
接受可选的关键字参数,half 选项,默认行为是向上舍入。[Bug #12548] [Bug #12958] half 选项可以是 :even、:up 和 :down。[Feature #12953]
-
-
-
Hash#compact
和Hash#compact!
[Feature #11818] -
Hash#transform_values
和Hash#transform_values!
[Feature #12512]
-
-
-
Fixnum 和 Bignum 合并到
Integer
中。[Feature #12005] -
现在
Integer#ceil
、Integer#floor
和Integer#truncate
可以接受可选的位数,就像Integer#round
一样。[Feature #12245] -
Integer#digits
用于提取位值表示法的列。[Feature #12447] -
现在
Integer#round
接受可选的关键字参数,half 选项,默认行为现在是向上舍入。[Bug #12548] [Bug #12958]half 选项可以是 :even、:up 和 :down。[Feature #12953]
-
-
-
现在
IO#gets
、IO#readline
、IO#each_line
、IO#readlines
、IO.foreach
接受可选的关键字参数 chomp 标志。[Feature #12553]
-
-
-
现在
Kernel#clone
接受可选的关键字参数 freeze 标志。[Feature #12300]
-
-
-
MatchData#named_captures
[Feature #11999] -
MatchData#values_at
支持命名捕获。[Feature #9179]
-
-
-
现在
Module#refine
接受模块作为参数。[Feature #12534] -
Module.used_modules
[Feature #7418]
-
-
-
Numeric#finite?
,Numeric#infinite?
[Feature #12039]
-
-
-
支持 CLOCK_MONOTONIC_RAW_APPROX、CLOCK_UPTIME_RAW 和 CLOCK_UPTIME_RAW_APPROX,这些是 macOS 10.12 引入的。
-
-
-
现在
Rational#round
接受可选的关键字参数,half 选项,默认行为现在是向上舍入。[Bug #12548] [Bug #12958] half 选项可以是 :even、:up 和 :down。[Feature #12953]
-
-
-
元字符 X 匹配 Unicode 9.0 字符,并对 UTR #51 Unicode Emoji Version 4.0 emoji zwj 序列进行了一些解决方法。
-
Regexp#match?
[Feature #8110]这会返回布尔值,并且不保存反向引用。
-
更新到 Onigmo 6.0.0。
-
-
Regexp/String: 将 Unicode 版本从 8.0.0 更新到 9.0.0 [Feature #12513]
-
RubyVM::Env
-
RubyVM::Env 已被删除。
-
-
-
String#casecmp?
[Feature #12786] -
String#concat
、String#prepend
[Feature #12333]现在可以接受多个参数。
-
现在
String#each_line
和String#lines
接受可选的关键字参数 chomp 标志。[Feature #12553] -
String#match?
[Feature #12898] -
String#unpack1
[Feature #12752] -
String#upcase
、String#downcase
、String#capitalize
、String#swapcase
及其感叹号变体适用于所有 Unicode,不再仅限于 ASCII。支持的编码为 UTF-8、UTF-16BE/LE、UTF-32BE/LE 和 ISO-8859-1~16。可以使用选项进行修改。有关详细信息,请参阅String#downcase
的文档。[Feature #10085] -
String.new
(capacity: size) [Feature #12024]
-
-
-
现在
StringIO#gets
、StringIO#readline
、StringIO#each_line
、StringIO#readlines
接受可选的关键字参数 chomp 标志。[Feature #12553]
-
-
-
Symbol#casecmp?
[Feature #12786] -
现在
Symbol#match
返回MatchData
。[Bug #11991] -
Symbol#match?
[Feature #12898] -
现在
Symbol#upcase
、Symbol#downcase
、Symbol#capitalize
和Symbol#swapcase
适用于所有 Unicode。有关详细信息,请参阅String#downcase
的文档。[Feature #10085]
-
-
-
Thread#report_on_exception
和Thread.report_on_exception
[特性 #6647]
-
-
-
TracePoint#callee_id
[特性 #12747]
-
-
-
引入了名为
Warning
的新模块。默认情况下,它只有一个名为 warn 的单例方法。这使得第三方库可以控制警告的处理方式。[特性 #12299]
-
标准库更新(仅限突出更新)¶ ↑
-
-
不允许使用逗号作为分隔符 [Bug #12791]
-
-
CSV
-
添加了 liberal_parsing 选项。[特性 #11839]
-
-
-
如果强制转换失败,
IPAddr#==
和IPAddr#<=>
不再引发异常。[Bug #12799]
-
-
IRB
-
Binding#irb: 像 r56624 的 'binding.pry' 那样启动一个 REPL 会话。
-
-
-
允许在构造函数中指定日志记录器参数,例如 level、progname、datetime_format、formatter。[特性 #12224]
-
添加 shift_period_suffix 选项。[特性 #10772]
-
-
-
新方法:
Net::HTTP.post
[特性 #12375]
-
-
Net::FTP
-
支持 TLS (RFC 4217)。
-
支持 Net::FTP.new 的哈希样式选项。
-
为 Net::FTP#status 添加了一个新的可选参数 pathname。由 soleboxy 贡献。[GH-1478] [特性 #12965]
-
-
-
包括 Ruby/OpenSSL 2.0。
OpenSSL
已提取为Gem
,现在在单独的存储库中维护:github.com/ruby/openssl。它仍然是“默认 gem”。 [特性 #9612] 有关完整的发行说明,请参阅 ext/openssl/History.md。
-
-
optparse
-
添加 into 选项。[特性 #11191]
-
-
pathname
-
新方法:
Pathname#empty?
[特性 #12596]
-
-
-
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
中。[Feature #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#to_time
现在保留时区。[Bug #12189]
-
-
-
更新到
Psych
2.2.2
-
-
-
更新到
RDoc
5.0.0
-
-
RubyGems
-
更新到 RubyGems 2.6.8
-
-
shellwords
-
Shellwords.shellwords
(shellsplit) 仅当后跟以下字符之一时才将反斜杠视为转义字符:$ ‘ “ \ <newline> [Bug #10055]
-
-
-
Time#to_time
现在保留时区。[Bug #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.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]