所以我的代码在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,但这并没有改变任何内容。
有谁知道红宝石在抱怨什么?
答案 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%的情况下,我更喜欢括号。它的优势在于,您可以在最后一个键值对后面添加,
,这样可以简化这些键值的重新排序。