2012-12-17 38 views

回答

5

既然你提到,你是新來的Ruby,它是第一個值得考慮的是你正在處理的例子正則表達式(正則表達式)注 - 任何在兩個前鋒之間的分隔斜線:

/start/ # a regular expression literal 

正則表達式是匹配較大字符串中某些字母組合的有效方法。

"To start means to begin." =~ /start/ #=> true, because 'start' is in the string. 

雙點符號是觸發器操作,一個有爭議的結構可能是由Perl的繼承,通常不建議使用,因爲它會導致混亂。

它表示如下: 它將集體評估爲false,直到左手操作數爲真。在這一點上,它將共同評估爲真。然而,只有當右手操作數的計算結果爲真時,它纔會保持真實 - 在這一點上,它將再次被評估爲假。使用您上面的例子

因此:

while gets 
print if /start/../end/ 
end 
  1. 直到「開始」被輸入,則整個表達式爲假,並打印什麼。
  2. 當輸入「開始」時,整個表達式爲真,因此此點之後的所有輸入也將被打印出來。 (儘管不是'開始')
  3. 只要'結束'輸入,整個表達式的計算結果爲false,並且沒有打印出來。
+0

正則表達式不一定是使用'/'創建的。它們也可以使用Regexp類中的'%r'和方法創建。 –

+0

雖然'/ foo /../bar/'並不爲人所熟知,它非常簡潔明瞭,是抓取文本塊的好方法,特別是從文件讀取時。我已經看到人們試圖用方法替換它,但是由此產生的代碼是一團糟。是的,它與'''範圍操作符視覺衝突,但它的用處使它值得了解。 –

+0

非常感謝,您的回答非常有幫助!本書中沒有提及觸發器操作符,但代碼示例仍然使用它,所以我徹底困惑了! –

相關問題