新的 Ruby 1.9 哈希语法

Lie*_*oen 6 ruby jruby syntax-error

new_hash = {:simon => "Talek", :lorem => "Ipsum"}
Run Code Online (Sandbox Code Playgroud)

可以替换为

new_hash = {simon: "Talek", lorem: "Ipsum"}
Run Code Online (Sandbox Code Playgroud)

还有更短的写法吗

:on => :collection
Run Code Online (Sandbox Code Playgroud)

应用相同的逻辑会引发错误:

on: :collection
Run Code Online (Sandbox Code Playgroud)

更新以提供更多信息:

在我的 routes.rb 中:

get 'detail', { on: :member } 
Run Code Online (Sandbox Code Playgroud)

不起作用。也没有

get 'detail',  on: :member 
Run Code Online (Sandbox Code Playgroud)

错误:

Exiting
SyntaxError: C:/Workspace/OE_11/CyberTrack_Rails3/config/routes.rb:23: 
  syntax error, unexpected ':'

      get 'detail', { on: :member }
Run Code Online (Sandbox Code Playgroud)

或者

Exiting
SyntaxError: C:/Workspace/OE_11/CyberTrack_Rails3/config/routes.rb:23: 
  syntax error, unexpected ':'

      get 'detail', on: :member
Run Code Online (Sandbox Code Playgroud)

Jör*_*tag 4

这对我来说效果很好:

def get(*args) p *args end

get 'detail', on: :member
# "detail"
# { :on => :member }

RUBY_ENGINE
# => jruby
JRUBY_VERSION
# => 1.6.6
Run Code Online (Sandbox Code Playgroud)

编辑:现在您提供了错误消息,看来您没有运行 Ruby 1.9。新的哈希语法是在 Ruby 1.9 中引入的,它在旧版本中不起作用。您需要确保您正在运行 Ruby 1.9,方法是验证您是否正在运行正确的 Ruby 实现(例如 YARV 支持 1.9,MRI 不支持),或者如果您正在运行支持多种语言版本的 Ruby 实现(例如JRuby)您正在传递正确的命令行标志(例如jruby --1.9)。