2012-03-02 2 views
4
new_hash = {:simon => "Talek", :lorem => "Ipsum"} 

можно заменитьNew Ruby 1.9 Хеш синтаксис

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 
+0

Просьба представить полный пример того, что вы пытаетесь сделать. ': on =>: collection' сам по себе не имеет смысла. –

+2

Errr ... это прекрасно работает? '{on:: collection}' производит '{: on =>: collection}' для меня в IRB (Ruby 1.9.2). –

+0

Как вы пытаетесь его использовать? Он отлично работает для меня как «h = {on:: collection}' –

ответ

3

Это прекрасно работает для меня:

def get(*args) p *args end 

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

RUBY_ENGINE 
# => jruby 
JRUBY_VERSION 
# => 1.6.6 

EDIT: Теперь, когда вы предоставили сообщение об ошибке, похоже, что вы не используете Ruby 1.9. Новый синтаксис хэша был введен в Ruby 1.9, он не работает в более старых версиях. Вам нужно убедиться, что вы используете Ruby 1.9, либо проверяя, что вы используете правильную реализацию Ruby (например, YARV поддерживает 1.9, MRI не работает), либо если вы используете Ruby-реализацию, поддерживающую несколько языковых версий (например, JRuby), что вы передаете правильные флаги командной строки (например, jruby --1.9).

+0

Странно. Я использую JRuby 1.6.6 ... возможно, он не поддерживает новый синтаксис Ruby? –

+1

Вы используете JRuby в 1.9-режиме? –

+0

JRuby 1.6.6 поддерживает как 1.8.7p357, так и 1.9.2p312, поэтому он должен работать.(Фактически, я * знаю *, что он работает, и он работал в течение нескольких лет, по крайней мере, так как это то, как долго я его уже использовал.) Но, очевидно, только если вы запустите его в режиме 1.9. –

-1

Bare action: 'edit' и :action => 'edit' являются синтаксическими ошибками. Вы можете передавать хэши без скобок в качестве последнего аргумента метода. Во всех других ситуациях используйте {action: 'edit'}.

Для этого, чтобы работать, вы должны быть запущены рубин 1.9+: get 'detail', { on: :member }

+0

Вы можете передавать хеши без скобок методам **, если ** хеш - последний параметр в наборе. В любом случае, ФП понял все правильно. – jibiel

+0

да, справа, thx для коррекции – farnoy

1

Как уже упоминалось, вы должны использовать 1.9, чтобы получить этот синтаксис для работы. Установка переменной окружения JRUBY_OPTS на --1.9 гарантирует, что вы используете правильную рубиновую версию.

Смежные вопросы