Синтаксическая ошибка Ruby 1.9.2 - PullRequest
3 голосов
/ 15 ноября 2011

Итак, у меня есть код, который отлично работает на ruby ​​1.8.7, но на 1.9.2 он не работает.

Вот сообщение об ошибке:

rake aborted!
/u/apps/proxy/releases/20111115125519/db/seeds.rb:16: syntax error, unexpected tASSOC, expecting ')'
  :image_url => 'dooropen',
           ^
/u/apps/proxy/releases/20111115125519/db/seeds.rb:16: syntax error, unexpected ',', expecting $end

Вотсоответствующая часть кода:

door_on_state = BoxStateConfiguration.create (
  :image_url => 'dooropen',
  :color => '#CD493B',
  :label => 'Ytterdörr öppen',
  :interactive => false
)

Я добавил # encoding: utf-8 в начало файла, так как иногда это проблема, когда он работает на 1.8.7, но не на 1.9.2, но это не такничего не изменить.

Кто-нибудь знает, на что жалуется рубин?

Ответы [ 3 ]

4 голосов
/ 15 ноября 2011

Вы пытались убрать пробел между create и (?Если Ruby не понимает, что вы хотите вызвать метод, вы не можете пропустить {}, поскольку он зарезервирован для обработки хеша как последнего аргумента в методе.

>> def foo(h) ; end #=> nil
>> foo (:foo => "bar")
SyntaxError: (irb):2: syntax error, unexpected tASSOC, expecting ')'
foo (:foo => "bar")
            ^
(irb):2: syntax error, unexpected ')', expecting $end
    [snip]
>> foo(:foo => "bar") #=> nil
1 голос
/ 15 ноября 2011

@ MichaelKohl ответ точно. Вам нужно убрать пробел перед паренем для вызова метода. Вот доказательство:

phrogz$ cat original.rb 
door_on_state = BoxStateConfiguration.create (
  :image_url => 'dooropen',
)

phrogz$ ruby -c original.rb
original.rb:2: syntax error, unexpected tASSOC, expecting ')'
  :image_url => 'dooropen',
               ^
original.rb:2: syntax error, unexpected ',', expecting $end

phrogz$ cat fixed.rb 
door_on_state = BoxStateConfiguration.create(
  :image_url => 'dooropen',
)

phrogz$ ruby -cv fixed.rb 
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0]
Syntax OK
0 голосов
/ 15 ноября 2011

Помимо предпочтительного способа Майкла Коля, вы также можете удалить ) и заменить ( на \

Из-за \ Руби знает, что утверждение еще не закончено.Однако в 95% всех случаев я бы предпочел скобки.Преимущество в том, что вы можете поставить , за последней парой ключ-значение, что упрощает их переупорядочение.

...