Ruby块语法错误

可能重复:
Ruby和非私有的参数

我不确定我是否理解这个语法错误。 我正在使用Carrierwave在Rails应用程序中pipe理一些file upload,而且我似乎正在错误地将一个块传递给其中一个方法。

以下是Carrierwave Docs中的示例:

version :thumb do process :resize_to_fill => [200,200] end 

这是我所拥有的:

 version :full { process(:resize_to_limit => [960, 960]) } version :half { process(:resize_to_limit => [470, 470]) } version :third { process(:resize_to_limit => [306, 306]) } version :fourth { process(:resize_to_limit => [176, 176]) } 

上述不起作用,我得到syntax error, unexpected '}', expecting keyword_end 。 有趣的是,以下工作完美:

 version :full do process :resize_to_limit => [960, 960]; end version :half do process :resize_to_limit => [470, 470]; end version :third do process :resize_to_limit => [306, 306]; end version :fourth do process :resize_to_limit => [176, 176]; end 

所以,我的问题是,为什么我可以使用do...end来传递一个块,但在这种情况下不能使用大括号?

谢谢!

One Solution collect form web for “Ruby块语法错误”

尝试这个:

 version(:full) { process(:resize_to_limit => [960, 960]) } version(:half) { process(:resize_to_limit => [470, 470]) } version(:third) { process(:resize_to_limit => [306, 306]) } version(:fourth) { process(:resize_to_limit => [176, 176]) } 

你有一个优先问题。 { }块的绑定比do...end块更紧密,并且比函数调用更紧密; 结果是Ruby认为你正在试图提供一个块作为一个符号的参数,并说不。

通过比较以下内容,您可以看到一个更清晰的(?)或可能更为亲密的示例:

 [1, 2, 3].inject 0 { |x, y| x + y } [1, 2, 3].inject(0) { |x, y| x + y } 
  • Mysql2 ::错误:不正确的string值
  • 获得水豚testing的下拉select值
  • Ruby / Rails - 更改时间的时区,而不更改值
  • 在Rails模型中使用多个PostgreSQL模式
  • Rails - 无法findJavaScript运行时?
  • 在postgresql应用程序的rails中运行迁移之后的序列NOTICES
  • 哪里存储公共轨道应用程序的敏感数据?
  • accepted_nested_attributes_for find_or_create?
  • Rails 3.1插件gem,虚拟testing应用程序,rspec
  • 如何在rspec请求规范中设置请求标头?
  • 尝试运行rspec时出错:`require':无法加载这样的文件 - rails_helper(LoadError)