Ruby 2.0 Preview 1釋出

jieforest發表於2012-11-29
Ruby 2.0的釋出經理Yusuke Endoh宣佈瞭如下幾件事:Ruby 2.0.0的直接特性已經凍結,Preview 1釋出,正式版的釋出日期是2013年2月24日。屆時正是Ruby的20週年紀念日,因此2.0版本選擇這個時間釋出也非常合適。

新特性的總結可以在Ruby的NEWS檔案及其問題跟蹤系統中找到。所有特性之中,Keyword Argument(關鍵字引數)和Refinement對Ruby程式設計師的影響是最大的:

Keyword Argument

不同於僅僅傳遞一個雜湊值作為方法引數,Ruby 2.0將完全支援關鍵字引數。下面是選自Ruby自身單元測試程式的一個程式碼片段:

CODE:

def f1(str: "foo", num: 424242)
  [str, num]
end

def test_f1
  assert_equal(["foo", 424242], f1)
  assert_equal(["bar", 424242], f1(str: "bar"))
  assert_equal(["foo", 111111], f1(num: 111111))
  assert_equal(["bar", 111111], f1(str: "bar", num: 111111))
  assert_raise(ArgumentError) { f1(str: "bar", check: true) }
  assert_raise(ArgumentError) { f1("string") }
end 注意該特性只能用於有預設值的引數。關於新語法的更多例子以及新語法如何使用傳統引數,請參考Ruby的單元測試。

Refinement

refinement的目標是通過減少補丁的應用範圍使打動態補丁(monkey patching)更為安全。下面是由Matz給出的一個例子,MathN模組包含進來之後“/”操作符才能在Fixnum上使用:

CODE:

module MathN
  refine Fixnum do
    def /(other) quo(other) end
  end
end

class Foo
  using MathN

  def foo
    p 1 / 2
  end
endYehuda Katz寫了一篇詳細的部落格文章來介紹如何將Refinement應用於實踐之中。Refinement目前已包含在Ruby 2.0分支中,但仍然可能因效能問題而被踢除(參見 最初請求特性的討論)。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/301743/viewspace-750228/,如需轉載,請註明出處,否則將追究法律責任。

相關文章