设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 软件追踪 查看内容

Ruby 2.0 未被提及的一些特性

2013-4-17 14:11| 发布者: 红黑魂| 查看: 1734| 评论: 0|来自: CSDN

摘要: Ruby 2.0发布已经有一段时间了,网上也有大量关于2.0新特性的文章。但是这些文章似乎遗漏了一些特性,因此有了下面的内容。1. 现在所有的常量均支持 ||= 和 =在Ruby 1.8和1.9中,常量的行为和变量一样,但并非所有都 ...
Ruby 2.0发布已经有一段时间了,网上也有大量关于2.0新特性的文章。但是这些文章似乎遗漏了一些特性,因此有了下面的内容。 



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

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

Ruby代码 
  1. >> A = nil; A ||= 1; p A  
  2. -e:1: warning: already initialized constant A  
  3. 1  
  4. >> A = 1; A += 1; p A  
  5. -e:1: warning: already initialized constant A  
  6. 2  
  7. >> ::B ||= 1  
  8. -e:1: constant re-assignment  

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

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

Ruby代码 
  1. >> ::A ||= 1; p A  
  2. 1  

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

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

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

Ruby代码 
  1. >> if falseelse p:bar end  
  2. -e:1: syntax error, unexpected tLABEL  
  3. if falseelse p:bar end  
  4.                  ^  

但是在Ruby 2.0中可以解析: 

Ruby代码 
  1. >> if falseelse p:bar end  
  2. :bar  
  3. => :bar  

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

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

Ruby 1.8: 

Ruby代码 
  1. >> def f; BEGIN{}; end  
  2. -e:1: BEGIN in method  
  3. def f; BEGIN{}; end  
  4.             ^  

Ruby 1.9: 

Ruby代码 
  1. >> def f; BEGIN{}; end  
  2. -e:1: syntax error, unexpected keyword_BEGIN  
  3. def f; BEGIN{}; end  
  4.             ^  

Ruby 2.0: 

Ruby代码 
  1. -e:1: BEGIN is permitted only at toplevel  
  2. def f; BEGIN{}; end  
  3.             ^  

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

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

Ruby 1.9: 

Ruby代码 
  1. >> m { |a  
  2. ;b| }  
  3. -:1: syntax error, unexpected '\n', expecting '|'  

Ruby 2.0: 

Ruby代码 
  1. >> p { |a  
  2. ;b| }  
  3. nil  

5.  其他 

Ruby 1.9: 

Ruby代码 
  1. >> m () {}  
  2. -e:1: syntax error, unexpected ')'  
  3. m () {}  
  4.     ^  

Ruby 2.0: 

Ruby代码 
  1. >> p () {}  
  2. nil  

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

原文:Unmentioned Features of Ruby 2.0

酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部