9

运行rails generate controller Foo home结果:

class FooController < Application Controller
  def home
  end
end
(There's nothing on this line in the actual file, just a blank line)

这个空行有目的吗?

4

2 回答 2

11

通常使用换行符来表示行尾,即使是最后一行。许多编辑器(比如我使用的 vi)默默地添加这个换行符。共识是文本文件(尤其是在 Unix 世界中)应该以换行符结尾,如果它不存在,历史上就会出现问题。 为什么文本文件应该以换行符结尾?

我用来计算文件“wc”中行数的工具只计算文件中的换行符,所以如果没有尾随换行符,它将显示 3 而不是 4。

它还提高了生成器中使用的模板的可读性。考虑: https ://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/controller/templates/controller.rb

要删除尾随换行符,该模板将具有最后一行:

end<% end -%>

代替:

end
<% end -%>

这对我来说似乎不太可读。


下面的讨论指的是文件前面的空行,而不是尾随的换行符。

这是一个疏忽,并在更高版本的 Rails 中得到了修复。

您可以在此处的提交历史记录中看到删除空行的位置:

https://github.com/rails/rails/commits/master/railties/lib/rails/generators/rails/controller/templates/controller.rb

这是它被删除的提交:
删除底部多余的空白行

它还向您展示了它存在的原因,以前他们只是在每个操作后添加一个空行。

于 2013-04-18T01:20:41.447 回答
5

将源代码保存在 git 等 SCM 中时,通常使用换行符结束文件。假设您在最后添加一些内容并提交更改。现在比较两种情况下的差异。

1)以换行符结尾:

--- foo_controller.rb   2013-04-18 09:14:48.000000000 +0800
+++ foo_controller2.rb  2013-04-18 09:15:10.000000000 +0800
@@ -1,4 +1,7 @@
 class FooController < ApplicationController
   def home
   end
-end
\ No newline at end of file
+end
+
+p FooController.methods
\ No newline at end of file

2)没有换行符:

--- foo_controller.rb   2013-04-18 09:16:28.000000000 +0800
+++ foo_controller2.rb  2013-04-18 09:16:35.000000000 +0800
@@ -2,3 +2,5 @@
   def home
   end
 end
+
+p FooController.methods

您会看到 diff 将“end”和“end\n”视为两条不同的行,这在第一种情况下会导致不太干净的视图。

于 2013-04-18T01:24:55.997 回答