【发布时间】:2013-08-05 16:42:32
【问题描述】:
在 RubyMine 调试器中,只需在手表中输入以下内容:
';'
或
";"
我得到了错误:
“未终止的字符串遇到文件结尾”
这是为什么?它不会发生在 Rails 控制台中,据我所知,它与 RubyMine 没有任何关系。
【问题讨论】:
标签: ruby-on-rails ruby string syntax termination
在 RubyMine 调试器中,只需在手表中输入以下内容:
';'
或
";"
我得到了错误:
“未终止的字符串遇到文件结尾”
这是为什么?它不会发生在 Rails 控制台中,据我所知,它与 RubyMine 没有任何关系。
【问题讨论】:
标签: ruby-on-rails ruby string syntax termination
这是 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 等和 not 用于解析 Ruby 语言(在 irb 的情况下具有类似 shell 的扩展)。它对评估 Ruby(或 Ruby 风格)表达式的支持有限。当然,这对于有效调试 Ruby 程序至关重要。但是,您不应期望它能够解析 irb 或 ruby 命令本身能够解析或以完全相同的方式解析事物的所有内容。在某些情况下,像这样,它可以处理某些表达式,但它们需要根据 调试器 的解析规则进行转义,而不是 Ruby 语言本身。
Rails 控制台建立在 irb 之上,因此是一个 Ruby shell,并像 irb 和 ruby 一样遵守 Ruby 语言的解析规则。
【讨论】:
Ruby CSV 库在解析 CSV 时遇到了同样的问题,该 CSV 使用分号作为分隔符。我添加了 col_sep ';'但它总是导致以下错误:未终止的字符串遇到文件结尾
正确的做法:
CSV.open(file.path, col_sep: '\;', &:readline)
将此添加为其他人的文档。
【讨论】: