【问题标题】:String with a semicolon results in "unterminated string meets end of file" in RubyMine带有分号的字符串在 RubyMine 中导致“未终止的字符串遇到文件结尾”
【发布时间】:2013-08-05 16:42:32
【问题描述】:

在 RubyMine 调试器中,只需在手表中输入以下内容:

';'

";"

我得到了错误:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    Rails 控制台建立在 irb 之上,因此是一个 Ruby shell,并像 irbruby 一样遵守 Ruby 语言的解析规则。

    【讨论】:

    • 我在使用 gsub('\;',',') 时遇到了同样的问题 - 解释器做了一件事,调试提示做了另一件事
    【解决方案2】:

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

    正确的做法:

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

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

    【讨论】:

      猜你喜欢
      • 2018-10-15
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多