2011-04-16 74 views
6

在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 

回答

1

詞法分析器可能是「鬆散」的,因爲它會忽略緊接在點之前的單個換行符和空格。它可能不允許多個換行符。這使得鏈式語句變得雜亂無章,而且在沒有誤報的情況下處理起來要複雜得多。這一切都表示...

如果你有行內添加註釋,這可能是簡潔,鏈接報表發表不恰當的地方。

+0

我往往有一個俏皮話鏈,每做一個特定的任務,是有意義的註釋行由行。 – sawa 2011-04-17 03:31:34

+0

它仍然違反慣例。你不應該每條評論一行 - 代碼應該說明問題。如果它沒有一些內聯評論是有幫助的。特別是關於鏈接,你可以打破那些語句成的通話清單和任何含糊不清(如果需要)追加很短的行結束註釋。沒有人想讀長句評論,然後閱讀它所屬的單詞長代碼。我們懂了。 – coreyward 2011-04-17 04:16:42

+0

這是相反的方式。單線程可能有一個塊,或者有一個複雜的正則表達式。評論可以是簡單的短語。此外,我經常測試鏈中的一個班輪幾個備選方案,並需要在測試註釋掉不替代 – sawa 2011-04-17 05:04:56