可以在Ruby中使用分号吗?


76

在学习Ruby时,我注意到在所有示例中都没有分号。我知道,只要每个语句独立行,这都很好。但我想知道是,你在Ruby中使用分号?


对于在那里的Ruby人士:应该使用分号吗?这样做有好处吗?我知道在编写Ruby代码时,我会反身添加它们。
安迪·莱斯特

@Andy请勿使用分号,除非您要将多条语句放在一行上,无论如何都应避免这样做
Yaser Sulaiman 2010年

@Yaser:我有点需要分号。因为当一行中有没有分号的函数时,vim会自动缩进,这是我不希望发生的。
Mark Szymanski

您可能要问一个问题,因为很少有人将vim与ruby一起使用。
安德鲁·格林

@YaserSulaiman在评论中的链接给出了这样的论点,即分号使代码更不清晰且丑陋。这是一个有效的意见,但这是一个意见。
托尼

Answers:



37

附带说明一下,在(j)irb会话中使用分号很有用,以避免打印出长得离谱的值,例如

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

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

特别适合您的MyBigORMObject.find_all调用。


6

分号:是的。

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

3

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

尽管我的典型风格(以及我看到的大多数代码)在每一行上都放置了一行代码,所以使用;是不必要的。


3

我遇到的唯一的情况是分号是有用的,是在声明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

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

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

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


1

如下例所示,使用分号保留块语法可能会很有趣:

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

您维护一行代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.