【问题标题】:commenting restriction评论限制
【发布时间】:2011-08-06 22:02:24
【问题描述】:

在 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)

句点在视觉上用作缩进的项目符号。

问题是,当您想在以句点开头的行之前插入 cmets 时,它会返回错误。

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

【问题讨论】:

    标签: ruby comments newline indentation ruby-1.9


    【解决方案1】:

    词法解析器可能更“宽松”,因为它会忽略紧接在点之前的单个换行符和空格。它可能不允许多个换行符。这将链接的语句拆分成不连贯的混乱,并且在没有误报的情况下处理变得更加复杂。都说了……

    如果您必须添加内联 cmets,那么它可能不适合放置简洁的链式语句。

    【讨论】:

    • 我经常有一连串的单行代码,每行执行一项特定的任务,逐行注释是有意义的。
    • 而且它仍然违反惯例。您不必每行都注释——代码应该自己说话。如果它没有一些内联 cmets 是有帮助的。特别是在链接方面,您可以将这些语句分解为调用列表,并在任何不清楚的地方(如果需要)附加非常短的行尾 cmets。没有人愿意阅读一个句子长的评论,然后是它所属的一个字长的代码。我们明白了。
    • 情况正好相反。单行可能有一个块,或者有一个复杂的正则表达式。评论可以是简单的短语。另外,我经常在链中测试一些单行的替代方案,需要注释掉未测试的替代方案
    猜你喜欢
    • 2017-12-02
    • 2012-09-17
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多