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]
-
现在允许顶层返回。 [Feature #4840]
核心类更新(仅限重要的更新)¶ ↑
-
-
Array#concat
[Feature #12333]现在接受多个参数。
-
Array#max
和Array#min
。 [Feature #12172]这可能会导致轻微的不兼容:如果您重新定义
Enumerable#max
并调用 max 到Array
,则您的重新定义现在将被忽略。 您还应该重新定义Array#max
。 -
Array#pack
[Feature #12754]现在接受可选参数“buffer:” 以重用已分配的缓冲区。
-
Array#sum
[Feature #12217]这与
Enumerable#sum
不同,因为Array#sum
不依赖于每个方法的定义。
-
-
-
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
现在采用一个可选的关键字参数,半值选项,默认行为是向上舍入。 [Bug #12548] [Bug #12958] 半值选项可以是 :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
现在采用一个可选的关键字参数,半值选项,默认行为现在是向上舍入。 [Bug #12548] [Bug #12958]半值选项可以是 :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
现在采用一个可选的关键字参数,半值选项,默认行为现在是向上舍入。 [Bug #12548] [Bug #12958] 半值选项可以是 :even、:up 和 :down 中的一个。 [Feature #12953]
-
-
-
元字符 X 匹配 Unicode 9.0 字符,并对 UTR #51 Unicode Emoji 版本 4.0 表情符号 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
及其 bang 变体适用于所有 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
-
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
[Feature #6647]
-
-
-
TracePoint#callee_id
[Feature #12747]
-
-
-
引入名为
Warning
的新模块。默认情况下,它只有一个名为 warn 的单例方法。这使得第三方库能够控制警告的处理方式。[功能 #12299]
-
标准库更新(仅限未完成的更新)¶ ↑
-
CGI
-
不允许使用 , 作为分隔符 [Bug #12791]
-
-
CSV
-
添加 liberal_parsing 选项。[功能 #11839]
-
-
IPAddr
-
如果强制转换失败,IPAddr#== 和 IPAddr#<=> 不再抛出异常。[Bug #12799]
-
-
IRB
-
Binding#irb:在 r56624 处启动一个类似 'binding.pry' 的 REPL 会话。
-
-
Logger
-
允许在构造函数中指定日志记录器参数,如 level、progname、datetime_format、formatter。[功能 #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
[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
-
DateTime#to_time 现在保留时区。[Bug #12189]
-
-
Psych
-
更新到 Psych 2.2.2
-
-
-
更新到
RDoc
5.0.0
-
-
RubyGems
-
更新到 RubyGems 2.6.8
-
-
shellwords
-
Shellwords.shellwords (shellsplit) 仅当反斜杠后跟以下字符之一时才将其视为转义字符:$ ‘ “ \ <换行符> [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
-
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]