6

在 RubyMine 调试器中,只需在 watch 中输入:

';'

或者

";"

我得到了错误:

“未终止的字符串遇到文件结尾”

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

4

2 回答 2

12

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

Rails 控制台建立在 Ruby shell 之上irb,因此它遵循 Ruby 语言的解析规则,就像irband一样ruby

于 2013-08-05T16:50:08.003 回答
0

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

正确的做法:

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

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

于 2020-08-17T11:46:45.903 回答