2011-11-15 46 views
3

所以我的代碼在ruby 1.8.7上運行的很好,但在1.9.2上它不起作用。Ruby 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,但這並沒有改變任何東西。

有人知道紅寶石在抱怨什麼嗎?

回答

4

您是否試圖刪除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 
+0

試圖刪除空間...沒有幫助。嘗試添加{} ...沒有幫助。同時嘗試了兩次......沒有幫助。還有其他建議嗎? –

+0

奇怪的是,刪除空間不起作用。看到我的更新,添加空間會導致你描述的錯誤,同時刪除它修復它。 –

+0

這肯定是一個bug ...空白不應該...我嘗試了你在irb中的例子,你是對的,'foo(:foo =>「bar」)'工作。 –

-2

除了邁克爾·科爾的首選方法,您也可以刪除)\

因爲\,Ruby的人都知道,這種說法是沒有完成的更換(,但。但是,在95%的情況下,我更喜歡括號。它具有優勢,您可以將,放在最後一個鍵值對之後,從而簡化了這些鍵的重新排序。

1

@ MichaelKohl的回答完全正確。您需要刪除paren之前的方法調用空間。這裏是證明:

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

確認。當我第一次測試它時,我一定做了錯誤的事,但現在它可行,謝謝! –