2013-08-05 61 views

回答

8

這是Ruby調試器與Ruby解釋器有不同解析規則的結果。實際上,從irbruby命令調用的常規Ruby調試器會顯示相同的行爲。解決方法,但是,很簡單:創建一個字符串字面由單個分號,只用一個反斜槓轉義:

$ irb 
> require 'debugger' 
=> true 
> debugger 
(rdb:1) ';' 
*** SyntaxError Exception: /usr/local/rvm/rubies/ruby-1.9.3-p286/lib/ruby/1.9.1/irb/context.rb:166: unterminated string meets end of file 
(rdb:1) '\;' 
";" 

需要注意的是Ruby的調試命令行解析器的很重要與由irbruby解釋器使用的解析器:它的設計是圍繞解析調試器命令如backtracebreak等,並且不用於解析Ruby語言(與殼狀延伸在irb的情況下)。它對評估Ruby(或Ruby風格)表達式的支持有限。當然,這對於有效調試Ruby程序至關重要。但是,您不應該期望它能夠解析所有irbruby命令本身能夠以完全相同的方式解析或解析事物的所有內容。在某些情況下,像這樣,它可以處理某些表達式,但是它們需要根據調試器的解析規則進行轉義,而不是Ruby語言本身。

Rails控制檯建立在irb之上,因此它是一個Ruby shell,並且像irbruby一樣尊重Ruby語言的解析規則。

+0

我使用gsub('\;',',')時有同樣的問題 - 解釋器做了一件事,調試提示做了另一件事 – Mitch