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博客 ” ,链接:https://blog.itpub.net/301743/viewspace-750228/
,如需转载,请注明出处,否则将追究法律责任。