Ruby空格:是{:a => 1}比{:a =>更好1}?

时间:2010-02-10 17:20:13

标签: ruby formatting whitespace

查看其他人的代码,在花括号块中包含额外空间似乎很常见。这有什么理由吗?对我而言似乎增加了额外的击键以增加丑陋。特别是当事情嵌套时:

lambda { (1..5).map { |i| { :a => { :b => i } } } }

出于某种原因,它看起来更加简洁和连贯:

lambda {(1..5).map {|i| {:a => {:b => i}}}}

也许额外的空格是一些文本编辑器的副作用还是有历史原因或什么?我没有在样式指南中看到这个问题,如果它像2个空格缩进我想遵循惯例,但如果没有充分的理由我想我会继续按照自己的方式做事。您更喜欢哪种?为什么?

9 个答案:

答案 0 :(得分:7)

我看到的大多数Ruby代码(希望我编写的所有代码)都使用这种风格:

{ :key => 'value' }

这是我已经习惯并内化的。

当一切都说完了,这个特定的风格问题并不是最重要的。也就是说,Ruby社区(和其他人一样)认为将您的风格(a)与您正在使用的项目以及(b)整个代码社区相匹配非常重要。这就是为什么我建议使用额外的空格。

顺便说一下,这是一个很好的Ruby风格指南: http://www.caliban.org/ruby/rubyguide.shtml#style

答案 1 :(得分:3)

似乎只是一种风格问题。我认为它们很难看,遗漏了额外的空间。

编辑: 我同意下面的评论,只是说这是一个风格的问题并没有给你做任何你想要的许可。如果其他人必须阅读或维护代码,那么坚持共同的风格只是良好的编码实践。所以如果有人说服我,大多数Ruby代码都以这种方式使用空格,那么我就是第一个放入空间的人。就我个人而言,我仍然认为它很丑陋,但这远远不如让其他人能够阅读我的代码那么重要。

答案 2 :(得分:3)

您可以使用组合。在我以前工作的地方,我们有一种模糊的风格规则,即“在括号内使用空格,除非它们是结构的外支架”。这听起来令人困惑,但它通常可以帮助您达到一种具有良好直观视觉感的东西。

lambda {(1..5).map {|i| {:a => { :b => i }} }}

我喜欢这个间距如何设置内部哈希值(返回值),而不会感觉太松弛,并且尾随}}可以帮助您看到它被两层嵌套所包围。

答案 3 :(得分:1)

你展示的例子是风格问题。如果你要把它全部放在一条线上,我想你会占用空间。但是,如果你把

[1,2,3].slice (2)

在你的代码中,Ruby会给你一个警告

  

警告:不要放空间   参数括号

所以,我猜Ruby对括号充满热情,但不是大括号。

答案 4 :(得分:0)

我不是Ruby程序员,但是我倾向于在括号/括号后添加额外的空格,如果我之间有更长的时间 - 例如,如果声明或额外的计算作为函数的参数,则会更长。

所以我会说 - 虽然我不是Ruby程序员 - 按照您的意愿/作为您的雇主(如果您不是自由职业者/业余爱好者)愿意。

答案 5 :(得分:0)

在某种程度上,我认为这是个人品味的问题。通常我发现添加空格有助于提高可读性 - 但并非总是如此。在你的例子中,我个人认为:

lambda{ (1..5).map{ |i| {:a=>{:b=>i}} } }

当然,如果您发现阅读有问题,如果您愿意,几乎总是可以选择不使用lambda。

如果您正在与其他人进行编码 - 或者为了向Ruby社区展示您的代码的特定目的 - 您还必须考虑他们会发现可读的内容。

但我不确定我是否非常关心我上面的例子是否是“正常的红宝石间距”。

答案 6 :(得分:0)

散列开头/结尾处的额外空间可能是制作的好样式,以提高以字母开头/结尾的键/值的可读性。

{:a => "b"} #is less readable than
{ :a => "b" } #more readable.

部分归因于大括号,我很少在Ruby([])的哈希开头看到空格。
Ruby 1.9中引入的新哈希语法可能会修改此

{a: "b"} #same as {:a => "b"}

答案 7 :(得分:0)

我一直认为在花括号块中包含额外空格是最可读的,但如果前面的字符是右括号,则省略最后一个空格。要使用您的示例:

lambda { (1..5).map { |i| { :a => { :b => i }}}}

答案 8 :(得分:0)

恕我直言,在大多数情况下,空间表现为合成噪音,并且很难打字......我发现令人惊讶的是红宝石社区最近对他们的痴迷,少数人关心他们试图将他们强加于常态10年后根本没有这样的规范......