在 Ruby 中必须缩进吗?

Is indentation obligatory in Ruby?

我在 Ruby 的 Rails' 代码中遇到了一些错误,但我不知道那是不是因为它没有缩进。 Ruby 代码是否可以在没有缩进的情况下工作?

缩进不像 python 中那样严格。如果缩进关闭,您的代码应该可以正常工作,但其他开发人员可能无法维护或阅读。

对于严格 Ruby 的项目,您的缩进无关紧要。 Here's a SO answer to the same question that has a good example of functioning Ruby code with poor indentation. If you're curious about proper indentation style in general, Github's Ruby style guide 会给你一个很好的参考。

既然你特别提到了 Rails,我想你可能 运行 会在你的模板代码中出错。如果您使用像 slim 或 jade 这样的模板(您的视图将有 .slim.jade.haml),缩进可能很重要,缺少缩进会导致错误。例如,

h1 Example code

- @foos.each do |foo|
  p = foo

是有效的苗条代码,但是

h1 Example code

 - @foos.each do |foo|
p = foo

会产生语法错误。

正如@sawa 所说,缩进不是强制性的但是这是一个很好的做法,因为它可以让您的代码更容易阅读(对于人类),这意味着它更容易捕捉任何错误。根据 Eloquent Ruby 这本书,一个明智的做法是每行使用 两个 spaces 进行缩进,因为这显然是一个缩进,但不会占用太多的空间。该书还建议不要使用 tabs,因为 tab 没有通用长度,因此它们的长度可能会有很大差异。要查看所有这些操作...

没有缩进的代码:

class Human
def laugh
puts "laugh"
end
def cry
puts "cry"
end

代码不是很正确,但是错误在哪里不是很明显。

具有缩进和合理间距的代码:

class Human
  def laugh
    puts "laugh"
  end

  def cry
    puts "cry"
  end

这里更容易看到应该与 class 开口对齐的 end 丢失了。简而言之,是的,缩进您的代码并使用合理的间距(例如方法之间的 space )。它将帮助您和任何使用或阅读您的代码的人。