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

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

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...