【问题标题】:Ruby 1.9.2 syntax errorRuby 1.9.2 语法错误
【发布时间】:2011-11-15 13:13:27
【问题描述】:

所以我的代码在 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 上运行时有时会出现问题,但这并没有改变任何东西。

有人知道 ruby​​ 抱怨什么吗?

【问题讨论】:

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


    【解决方案1】:

    您是否尝试过删除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
    

    【讨论】:

    • 尝试删除空间...没有帮助。尝试添加 {}... 没有帮助。同时尝试了两者......没有帮助。还有其他建议吗?
    • 奇怪的是,删除空间不起作用。查看我的更新,添加空格会导致您描述的错误,而删除它可以修复它。
    • 这一定是一个错误...空白应该无关紧要...我在 irb 中尝试了您的示例,您是对的,foo(:foo => "bar") 有效。
    • 在 1.8 中不是已经有一个警告,在方法名称和参数列表的左括号之间不应该有空格吗? b
    • 我刚刚检查了 1.8.7:foo () (irb):2: warning: don't put space before argument parentheses
    【解决方案2】:

    @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
    

    【讨论】:

    • 已确认。我第一次测试时一定做错了什么,但现在可以了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多