带分号的字符串会导致RubyMine中的“未终止的字符串符合文件末尾”

时间:2013-08-05 16:42:33

标签: ruby-on-rails ruby string syntax termination

在RubyMine调试器中,只需在手表中键入:

';'

";"

我收到错误:

  

“未终止的字符串符合文件末尾”

这是为什么?它在Rails控制台中不会发生,并且它与RubyMine没有任何关系,就我所知。

2 个答案:

答案 0 :(得分:11)

这是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的情况下使用类似shell的扩展)。它对评估Ruby(或Ruby风格)表达式的支持有限。当然,这对于有效调试Ruby程序至关重要。但是,您不应期望它能够解析irbruby命令本身能够解析或以完全相同的方式解析事物的所有内容。在某些情况下,像这样,它可以处理某些表达式,但它们需要根据调试器的解析规则进行转义,而不是Ruby语言本身。

Rails控制台构建在irb之上,因此是一个Ruby shell,并且尊重Ruby语言的解析规则,就像irbruby一样。

答案 1 :(得分:0)

我在Ruby CSV库解析带有分号作为分隔符的CSV时遇到了同样的问题。我添加了col_sep';'但是它总是导致以下错误:未终止的字符串遇到文件结尾

正确的做法:

CSV.open(file.path, col_sep: '\;', &:readline)

将其添加为其他任何人的文档。