在Ruby 1.9中,关于换行结束位置的限制被放宽了,因此现在我们可以以一个句点开头表示方法调用。当我们混合使用链式和非链式方法时,想要显示下一个非链式方法的起始位置时,这种方法很方便。如果没有这个新功能,我们最好的选择可能是使用缩进:
method1(args1).
method2(args2).
method3(args3)
method4(args4).
method5(args5).
method6(args6)
或者插入一个空行。但这样做很不方便,因为我们必须注意缩进,同时,在链中的最后一个方法调用之外,不要忘记加上句号。因此,我经常因为多余或缺失句号而产生许多错误。有了这个新功能,我们可以更好地完成它:
method1(args1)
.method2(args2)
.method3(args3)
method4(args4)
.method5(args5)
.method6(args6)
这里的句号在视觉上起到缩进符的作用。
问题是,当你想在以句号开头的行之前插入注释时,会返回一个错误。
method1(args1)
# method2 does blah blah
.method2(args2)
# method3 then does foo foo
.method3(args3)
method4(args4)
# method5 does blah blah
.method5(args5)
# method6 then does bar bar
.method6(args6)
# => error
或者
method1(args1)
# method2 does blah blah
.method2(args2)
# method3 then does foo foo
.method3(args3)
method4(args4)
# method5 does blah blah
.method5(args5)
# method6 then does bar bar
.method6(args6)
# => error
看起来 "#...."
并不是简单地被删除,而是以某种方式与代码进行交互。发生了什么?这里的确切限制是什么?当句号在行尾时,这种情况就不会发生。
method1(args1).
# method2 does blah blah
method2(args2).
# method3 then does foo foo
method3(args3)
method4(args4).
# method5 does blah blah
method5(args5).
# method6 then does bar bar
method6(args6)
# => no error