NEWS for Ruby 2.6.0

此文件列出版本間可見的使用者功能變更,不包含錯誤修正。

請注意,每個項目都簡短到沒有提供背後原因或參考資訊。如需包含所有足夠資訊的完整變更清單,請參閱 ChangeLog 檔案或 Redmine(例如 https://bugs.ruby-lang.org/issues/$FEATURE_OR_BUG_NUMBER

自 2.5.0 版本以來的變更

語言變更

核心類別更新(僅未完成的)

陣列
新方法
修改方法
  • Array#to_h 現在接受將元素對應到新鍵/值對的區塊。[功能 #15143]

別名方法
繫結
新方法
  • 新增 Binding#source_location。[功能 #14230]

    此方法傳回繫結的來源位置,一個包含 __FILE____LINE__ 的 2 元素陣列。傳統上,相同的資訊可以透過 eval("[__FILE__, __LINE__]", binding) 擷取,但我們計畫變更此行為,讓 Kernel#eval 忽略繫結的來源位置 [錯誤 #4352]。因此,使用者應該使用此新引進的方法,而不是 Kernel#eval

目錄
新方法
列舉
新方法
  • 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
新方法
  • 新增 NilClass#=~ 以確保相容性。[功能 #15231]

NoMethodError
新選項
  • NoMethodError.new 接受 :receiver 選項,以在 Ruby 程式碼中設定接收者。[功能 #14313]

Numeric
不相容變更
OpenStruct
修改方法
  • OpenStruct#to_h 現在接受區塊,用於將金鑰和值對應到新的金鑰和值。[功能 #15143]

Proc
新方法
不相容變更
  • Proc#call 不再變更 $SAFE。[功能 #14250]

Random
新方法
Range
新方法
  • 新增 Range#% 執行個體方法。[功能 #14697]

不相容變更
正規表示式/字串
  • 將 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#split 如果給定區塊,會將每個子字串傳遞給該區塊。 [功能 #4780]

結構
修改方法
  • Struct#to_h 現在接受一個區塊,用於將鍵值對應到新的鍵值。 [功能 #15143]

別名方法
時間
新功能
追蹤點
新功能
  • 支援 “script_compiled” 事件。 [功能 #15287]

新方法
修改方法
  • TracePoint#enable 接受新關鍵字「target:」和「target_line:」。[功能 #15289]

標準函式庫更新(僅限未完成的更新)

BigDecimal

更新至版本 1.4.0。此版本包含多個相容性問題,詳情請見下方的相容性問題區段。

修改方法
  • BigDecimal() 接受類似於 Float() 的新關鍵字「exception:」。

近期版本之間的差異注意事項

您應該了解近期 bigdecimal 版本之間的差異。請根據下列資訊選擇合適的 bigdecimal 版本。

  • 1.3.5 具有沒有「exception:」關鍵字的 BigDecimal.new。當您指定「-w」選項時,您會看到 BigDecimal.new 的不建議使用警告。BigDecimal()、BigDecimal.new 和 Object#to_d 方法相同。

  • 1.4.0 具有帶有「exception:」關鍵字的 BigDecimal.new。您總是會看到 BigDecimal.new 的不建議使用警告。Object#to_d 方法不同於 BigDecimal() 和 BigDecimal.new

  • 2.0.0 將在 Ruby 2.6.0 發布後不久發布。此版本將不會有 BigDecimal.new 方法。

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]

新方法
新常數
  • 新增 Net::HTTPClientException 以不建議使用 Net::HTTPServerException,其名稱具有誤導性。[錯誤 #14688]

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.glob 搭配以 '\0' 分隔的模式清單將會被棄用,且現在會發出警告。[功能 #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

實作改善

其他變更