用于显示长数组的Ruby样式

我正在使用rubocop来检查我的代码的样式约定是否符合最佳实践。 我有一系列颜色,想知道显示它们的最佳方式。 我读过这些行应该少于80个字符,所以我这样做了。

 colors = [:light_red, :red, :pink, :orange, :light_yellow, :yellow, :light_green, :green, :light_blue, :blue, :white, :black] 

我从rubocop收到以下exception消息

 C: Align the elements of an array literal if they span more than one line 

这是否意味着,我应该做这样的事情

 colors = [:light_red, :red, :pink, :orange, :light_yellow, :yellow, :light_green, :green, :light_blue :blue, :white, :black] 

这占用了大量的空间,我认为我的方式更有效率。

关于在ruby中显示多行数组的样式规则是什么?

关于在哪里结束一行有不同的想法,所以我不讨论这个。

如果您要更改列表中项目之间的行,我可以说的一点是,您应该在分隔符(本例中为[] )和第一个/最后一个项之间执行此操作。 不:

 ....... [:foo, :bar, :baz] 

但:

 ....... [ :foo, :bar, :baz, ] 

将项目缩进两个空格相对于分隔符的缩进级别是一种约定。

另一个提示是在最后一项之后添加一个逗号,如上所示。 虽然这是可选的,并且对代码没有影响,但这将使您以后更容易编辑列表(更改顺序,添加,删除项目等)。

Batsov在https://github.com/bbatsov/ruby-style-guide#align-multiline-arrays中对此进行了描述。 看起来您的变体是正确的。 也许您对robocop默认规则进行了robocop

在v2.3中,你将能够使用Enumerable#tinyfy

 p colors.tinyfy(1) 

[:light_red,:red,:orange,:light_yellow,:yellow,:light_green,:light_blue,:blue,:white,:black]

 p colors.tinyfy(2) 

[:light_red,:red,:orange,:light_yellow,:yellow,:light_green,:light_blue,:blue,:white,:black]

 p colors.tinyfy(3) 

[:light_red,:red,:orange,:light_yellow,:yellow,:light_green,:light_blue,:blue,:white,:black]

 p colors.tinyfy(4) 

[:light_red,:red,:orange,:light_yellow,:yellow,:light_green,:light_blue,:blue,:white,:black]

 p colors.tinyfy(10) 

……….