在RubyMine的調試器,只需輸入到這個手錶:字符串與分號結果「未結束的字符串是否符合文件的末尾」在RubyMine的
';'
或
";"
,你會得到錯誤:
"unterminated string meets end of file"
這是爲什麼?它不會在Rails控制檯中發生,就我所知,它與RubyMine沒有任何關係。
在RubyMine的調試器,只需輸入到這個手錶:字符串與分號結果「未結束的字符串是否符合文件的末尾」在RubyMine的
';'
或
";"
,你會得到錯誤:
"unterminated string meets end of file"
這是爲什麼?它不會在Rails控制檯中發生,就我所知,它與RubyMine沒有任何關係。
這是Ruby調試器與Ruby解釋器有不同解析規則的結果。實際上,從irb
或ruby
命令調用的常規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的調試命令行解析器不的很重要與由irb
或ruby
解釋器使用的解析器:它的設計是圍繞解析調試器命令如backtrace
,break
等,並且不用於解析Ruby語言(與殼狀延伸在irb
的情況下)。它對評估Ruby(或Ruby風格)表達式的支持有限。當然,這對於有效調試Ruby程序至關重要。但是,您不應該期望它能夠解析所有irb
或ruby
命令本身能夠以完全相同的方式解析或解析事物的所有內容。在某些情況下,像這樣,它可以處理某些表達式,但是它們需要根據調試器的解析規則進行轉義,而不是Ruby語言本身。
Rails控制檯建立在irb
之上,因此它是一個Ruby shell,並且像irb
和ruby
一樣尊重Ruby語言的解析規則。
我使用gsub('\;',',')時有同樣的問題 - 解釋器做了一件事,調試提示做了另一件事 – Mitch