Ruby 1.9.2语法错误

时间:2011-11-15 13:13:27

标签: ruby ruby-on-rails-3 syntax-error ruby-1.9.2

所以我的代码在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 个答案:

答案 0 :(得分:4)

您是否尝试删除create(之间的空格?如果Ruby没有意识到你想要调用一个方法,那么你就不能离开{},因为它被保留用于处理哈希作为方法中的最后一个参数。 / p>

>> 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 :(得分:1)

@ 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

答案 2 :(得分:-2)

除了Michael Kohl的首选方式,您还可以删除)并将(替换为\

由于\,Ruby知道,该语句尚未完成。但是,在95%的情况下,我更喜欢括号。它的优势在于,您可以在最后一个键值对后面添加,,这样可以简化这些键值的重新排序。