新的Ruby 1.9哈希语法

时间:2012-03-02 14:30:30

标签: ruby jruby syntax-error

new_hash = {:simon => "Talek", :lorem => "Ipsum"}

可以替换为

new_hash = {simon: "Talek", lorem: "Ipsum"}

是否还有一种较短的写作方式

:on => :collection

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

on: :collection

更新以提供更多信息:

在我的routes.rb中:

get 'detail', { on: :member } 

不起作用。

也没有
get 'detail',  on: :member 

错误:

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

      get 'detail', { on: :member }

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

      get 'detail', on: :member

3 个答案:

答案 0 :(得分:3)

这对我来说很好用:

def get(*args) p *args end

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

RUBY_ENGINE
# => jruby
JRUBY_VERSION
# => 1.6.6

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

答案 1 :(得分:1)

正如其他人所提到的,你需要使用1.9来使这个语法工作。将环境变量JRUBY_OPTS设置为--1.9将确保您使用正确的ruby版本。

答案 2 :(得分:-1)

Bare action: 'edit':action => 'edit'都是语法错误。您只能传递没有方括号的哈希作为方法的最后一个参数。在所有其他情况下,请使用{action: 'edit'}

为此,您必须运行ruby 1.9 +:get 'detail', { on: :member }