簡體   English   中英

在Ruby 1.8.7中,為什么IRB中的JSON語法會引發語法,而不是在Rails 3.2.22.1控制台中?

[英]In Ruby 1.8.7, why does JSON syntax in IRB raise a Syntax, but not in a Rails 3.2.22.1 console?

我負責維護遺留的Ruby on Rails應用程序,我目前正在Ruby v1.8.7(2013-12-22 patchlevel 375)上測試它。 該應用程序使用Rails v3.2.22.1( Rails LTS提供的Rails版本)。 我遇到了一個奇怪的語法問題。

在一個vanilla IRB控制台中,Hash的哈希火箭語法按預期工作,並且JSON語法會按預期引發語法錯誤。 但是,在Rails控制台中,JSON語法工作正常,我無法弄清楚為什么它不會引發語法錯誤。

任何想法下面的代碼中發生了什么?

# in Bash
$ ruby -v
ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin18.2.0]

# in Rails console
Loading development environment (Rails 3.2.22.1)
irb(main):001:0> system "ruby -v"
ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin18.2.0]
=> true
irb(main):002:0> {a: 1} # JSON syntax doesn't trigger SyntaxError
=> {:a=>1} 
# loading vanilla IRB *()
irb(main):003:0> system "irb" # loading vanilla IRB

# in vanilla IRB (via Rails console, if that matters)
irb(main):001:0> system "ruby -v"
ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin18.2.0]
=> true
irb(main):002:0> {a: 1} # expected syntax error
SyntaxError: compile error
(irb):2: odd number list for Hash
{a: 1}
   ^
(irb):2: syntax error, unexpected ':', expecting '}'
{a: 1}
   ^
  from (irb):2

事實證明,在.ruby-version version中設置的Ruby版本是1.9.3-p551,這導致Rails使用Ruby 1.9.3-p551加載。 當我從系統中獲得Ruby版本時,這並不是很明顯,但是從應用程序中檢查Ruby版本就會發現差異。

$ bundle exec rails console
irb(main):001:0> system "ruby -v"
ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin18.2.0]
=> true
irb(main):002:0> RUBY_VERSION
=> "1.9.3"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM