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
。 [功能 #9451] -
精緻化已啟用 Kernel#send 和
BasicObject#__send__
。[功能 #11476] -
救援修改器現在適用於方法參數。[功能 #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 選項,預設行為為無條件進位。[錯誤 #12548] [錯誤 #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
現在接受一個選用的位數,以及Integer#round
。[功能 #12245] -
Integer#digits
用於提取位值表示法的欄位 [功能 #12447] -
Integer#round
現在接受一個選用的關鍵字參數,half 選項,而預設行為現在是無條件進位。[錯誤 #12548] [錯誤 #12958]half 選項可以是 :even、:up 和 :down 之一。[功能 #12953]
-
-
-
IO#gets
、IO#readline
、IO#each_line
、IO#readlines
、IO.foreach
現在接受一個選用的關鍵字參數,chomp 標記。[功能 #12553]
-
-
-
Kernel#clone
現在接受一個選用的關鍵字參數,freeze 標記。[功能 #12300]
-
-
-
MatchData#named_captures
[功能 #11999] -
MatchData#values_at
支援命名比對 [功能 #9179]
-
-
-
Module#refine
現在接受一個模組作為參數。[功能 #12534] -
Module.used_modules
[功能 #7418]
-
-
-
Numeric#finite?
、Numeric#infinite?
[功能 #12039]
-
-
-
支援 macOS 10.12 引進的 CLOCK_MONOTONIC_RAW_APPROX、CLOCK_UPTIME_RAW 和 CLOCK_UPTIME_RAW_APPROX。
-
-
-
Rational#round
現在接受一個選用的關鍵字參數,half 選項,而預設行為現在是無條件進位。[錯誤 #12548] [錯誤 #12958] half 選項可以是 :even、:up 和 :down 之一。[功能 #12953]
-
-
-
元字元 X 比對 Unicode 9.0 字元,並對 UTR #51 Unicode Emoji、版本 4.0 emoji zwj 序列進行一些解決方法。
-
Regexp#match?
[功能 #8110]這會傳回布林值,且不會儲存 backref。
-
更新至 Onigmo 6.0.0。
-
-
正規表示式/字串:將 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
及其驚嘆號變體適用於所有 Unicode,不再限於 ASCII。支援的編碼為 UTF-8、UTF-16BE/LE、UTF-32BE/LE 和 ISO-8859-1~16。變體可搭配選項使用。請參閱String#downcase
的文件,以取得詳細資訊。[功能 #10085] -
String.new
(容量:大小) [功能 #12024]
-
-
-
StringIO#gets
、StringIO#readline
、StringIO#each_line
、StringIO#readlines
現在採用一個可選的關鍵字引數,chomp 標記。[功能 #12553]
-
-
-
Symbol#casecmp?
[功能 #12786] -
Symbol#match
現在傳回MatchData
。[錯誤 #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]
-
標準函式庫更新(僅限未完成的更新)¶ ↑
-
-
不允許 , 作為分隔符號 [錯誤 #12791]
-
-
-
新增一個 liberal_parsing 選項。[功能 #11839]
-
-
-
IPAddr#==
和IPAddr#<=>
在轉換失敗時不再引發例外。[錯誤 #12799]
-
-
-
Binding#irb
: 在 r56624 開始一個 REPL 會話,類似於「binding.pry」。
-
-
-
允許在建構函式中指定記錄器參數,例如層級、程式名稱、日期時間格式、格式化程式。[功能 #12224]
-
新增 shift_period_suffix 選項。[功能 #10772]
-
-
-
新方法:
Net::HTTP.post
[功能 #12375]
-
-
Net::FTP
-
支援 TLS(RFC 4217)。
-
支援 Net::FTP.new 的雜湊樣式選項。
-
新增一個新的可選參數 pathname 到 Net::FTP#status。由 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
-
不允許 , 作為分隔符號 [錯誤 #12791]
-
相容性問題(不包括功能錯誤修正)¶ ↑
-
Array#sum
和Enumerable#sum
已實作。[功能 #12217]Ruby 本身沒有相容性問題,因為 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#to_time
現在會保留時區。[錯誤 #12189]
-
-
-
更新至
Psych
2.2.2
-
-
-
更新至
RDoc
5.0.0
-
-
RubyGems
-
更新至 RubyGems 2.6.8
-
-
shellwords
-
Shellwords.shellwords
(shellsplit) 僅在反斜線後接下列字元時,才會將反斜線視為跳脫字元:$ ‘ “ \ <換行符號> [錯誤 #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.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」經過最佳化,以避免建立暫時陣列。具體條件是實作細節:目前,陣列文字必須沒有展開,必須至少有一個非文字的表達式,長度必須 <= 0x100,而且
Array#max
和 min 不能重新定義。它會在大部分的日常和實際使用案例中運作,這些案例都是以「Math.max(x, y)」為目的而編寫的。 -
Thread
僵局偵測現在會顯示其回溯和依賴關係。[功能 #8214] -
st_table (st.c) 內部資料結構已改善。[功能 #12142]
-
Rational
已大幅最佳化。[功能 #12484]
其他變更¶ ↑
-
ChangeLog 已從儲存庫中移除。
它是由「make dist」從 Subversion 中的提交訊息產生的。另外請注意,現在人們應該遵循 Git 風格的提交訊息。範本寫在 變更的簡短摘要(50 個字元或更少)。[功能 #12283]