Dies ist das Ergebnis des Ruby-Debuggers, der verschiedene Syntaxregeln vom Ruby-Interpreter hat. Tatsächlich zeigt der reguläre Ruby-Debugger, der von irb
oder dem ruby
-Befehl aufgerufen wird, dasselbe Verhalten. Die Abhilfe ist jedoch einfach: ein Stringliteral erstellen einen einzelnen Semikolon aus, entkommen sie nur mit einem Backslash:
$ 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) '\;'
";"
Es ist wichtig, dass der Ruby-Debugger Kommandozeilen-Parser ist nicht die beachten gleiche wie der durch die Parser irb
oder ruby
Interpreter verwendet: sie um das Parsen Debuggerkommandos wie backtrace
, break
usw. und nicht zum Parsen der Sprache Ruby (mit schalenartigen Erweiterungen im Fall von irb
) ausgelegt ist. Es hat eingeschränkte Unterstützung für die Evaluierung von Ruby (oder Ruby-style) -Ausdrücken. Dies ist natürlich entscheidend für das effektive Debugging von Ruby-Programmen. Sie sollten jedoch nicht erwarten, dass alles in der Lage ist, alles zu parsen, was irb
oder der ruby
-Befehl selbst in der Lage wäre, Dinge auf die gleiche Weise zu parsen oder zu parsen. In einigen Fällen, wie diesem, kann es bestimmte Ausdrücke behandeln, aber sie müssen entsprechend den Parser-Regeln des Debuggers im Gegensatz zu der Ruby-Sprache selbst maskiert werden.
Die Rails-Konsole ist oben auf irb
gebaut und ist somit ein Shell-Ruby und respektiert die Parsing-Regeln der Sprache Ruby wie irb
und ruby
.
Ich hatte das gleiche Problem mit gsub ('\;', ',') - Interpreter hat eine Sache, Debug-Eingabeaufforderung hat eine andere – Mitch