阅读更多

0顶
0踩

编程语言

翻译新闻 Ruby 2.0 未被提及的一些特性

2013-04-16 15:26 by 副主编 wangguo 评论(2) 有7696人浏览
Ruby 2.0发布已经有一段时间了,网上也有大量关于2.0新特性的文章。但是这些文章似乎遗漏了一些特性,因此有了下面的内容。



1.  现在所有的常量均支持 ||= 和 &&=

在Ruby 1.8和1.9中,常量的行为和变量一样,但并非所有都是如此。这是比较可悲的。

>> A = nil; A ||= 1; p A
-e:1: warning: already initialized constant A
1
>> A = 1; A += 1; p A
-e:1: warning: already initialized constant A
2
>> ::B ||= 1
-e:1: constant re-assignment

注意,在最后一种情况下,常量甚至之前没有定义。

在Ruby 2.0中,允许我们自由使用。

>> ::A ||= 1; p A
1

但是请不要在你的代码中这样使用。

2.  更好的消歧符号和hash标签

在Ruby 1.9中,会提示以下代码存在语法错误:

>> if false; else p:bar end
-e:1: syntax error, unexpected tLABEL
if false; else p:bar end
                 ^

但是在Ruby 2.0中可以解析:

>> if false; else p:bar end
:bar
=> :bar

但是也请不要在代码中使用这个特性。

3.  在方法主体中使用BEGIN{}会显示错误

Ruby 1.8:

>> def f; BEGIN{}; end
-e:1: BEGIN in method
def f; BEGIN{}; end
            ^

Ruby 1.9:

>> def f; BEGIN{}; end
-e:1: syntax error, unexpected keyword_BEGIN
def f; BEGIN{}; end
            ^

Ruby 2.0:

-e:1: BEGIN is permitted only at toplevel
def f; BEGIN{}; end
            ^

请不要依赖这个特性或使用BEGIN来写代码。

4.  遮蔽块变量声明现在可以跨多行

Ruby 1.9:

>> m { |a
;b| }
-:1: syntax error, unexpected '\n', expecting '|'

Ruby 2.0:

>> p { |a
;b| }
nil

5.  其他

Ruby 1.9:

>> m () {}
-e:1: syntax error, unexpected ')'
m () {}
    ^

Ruby 2.0:

>> p () {}
nil

建议在专家指导下使用该特性。

原文:Unmentioned Features of Ruby 2.0
  • 大小: 31.4 KB
0
0
评论 共 2 条 请登录后发表评论
2 楼 wangguo 2013-04-16 17:44
clxy 写道
这大量的
引用
不要在代码中使用这个特性

是怎么个意思?

还有
引用
建议在专家指导下使用该特性。


我去,这是什么强力毒药或是WMD吗?!
服了...

这些特性不向后兼容,因此使用要慎重,稍有不慎就出错
1 楼 clxy 2013-04-16 15:53
这大量的
引用
不要在代码中使用这个特性

是怎么个意思?

还有
引用
建议在专家指导下使用该特性。


我去,这是什么强力毒药或是WMD吗?!
服了...

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics