你可以在Ruby中使用分号吗?

在学习Ruby时,我注意到在所有的例子中都没有分号。 我知道,只要每一个陈述都是一致的,这就完全没问题了。 但是我想知道的是,你可以在Ruby中使用分号吗?

提前致谢!

是。

Ruby不要求我们使用任何字符来分隔命令,除非我们想在一行中链接多个语句。 在这种情况下,使用分号(;)作为分隔符。

资料来源: http : //articles.sitepoint.com/article/learn-ruby-on-rails/2

作为一个方面说明,在(j)irb会话中使用分号是有用的,以避免打印出一个可笑的长expression式值,例如

irb[0]> x = (1..1000000000).to_a [printout out the whole array] 

VS

 irb[0]> x = (1..100000000).to_a; 1 1 

特别是对于你的MyBigORMObject.find_all调用。

分号:是的。

 irb(main):018:0> x = 1; c = 0 => 0 irb(main):019:0> x => 1 irb(main):020:0> c => 0 

甚至可以在单线循环中运行以分号分隔的多个命令

 irb(main):021:0> (c += x; x += 1) while x < 10 => nil irb(main):022:0> x => 10 irb(main):023:0> c => 45 

我遇到的唯一情况是分号有用的是为attr_reader声明别名方法。

考虑下面的代码:

 attr_reader :property1_enabled attr_reader :property2_enabled attr_reader :property3_enabled alias_method :property1_enabled?, :property1_enabled alias_method :property2_enabled?, :property2_enabled alias_method :property3_enabled?, :property3_enabled 

通过使用分号,我们可以减less3行:

 attr_reader :property1_enabled; alias_method :property1_enabled?, :property1_enabled attr_reader :property2_enabled; alias_method :property2_enabled?, :property2_enabled attr_reader :property3_enabled; alias_method :property3_enabled?, :property3_enabled 

对我来说,这并不能真正消除可读性。

是的,分号可以用作Ruby中的语句分隔符。

虽然我的典型风格(和我看到的大多数代码)在每一行放置一行代码,所以使用; 是相当不必要的。

在这个例子中,使用分号来保留块语法是很有趣的:

 a = [2, 3 , 1, 2, 3].reduce(Hash.new(0)) { |h, num| h[num] += 1; h } 

你维护一行代码。