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中,允许我们自由使用。 
 
  但是请不要在你的代码中这样使用。 
  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: 
 
  5.  其他 
  Ruby 1.9: 
 
 - >> m () {}  
 - -e:1: syntax error, unexpected ')'  
 - m () {}  
 -     ^  
 
  Ruby 2.0: 
 
  建议在专家指导下使用该特性。 
  原文:Unmentioned Features of Ruby 2.0 |