And*_*rew 9 ruby ruby-on-rails block syntax-error carrierwave
可能重复:
Ruby块和未加括号的参数
我不确定我是否理解这种语法错误.我正在使用Carrierwave来管理Rails应用程序中的一些文件上传,我似乎错误地将一个块传递给其中一个方法.
以下是Carrierwave文档中的示例:
version :thumb do
process :resize_to_fill => [200,200]
end
Run Code Online (Sandbox Code Playgroud)
这就是我的所作所为:
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]) }
Run Code Online (Sandbox Code Playgroud)
我得到以上不起作用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
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,为什么我可以do...end在这个实例中使用块而不是括号?
谢谢!
mu *_*ort 15
试试这个:
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]) }
Run Code Online (Sandbox Code Playgroud)
你有一个优先问题.该{ }块比do...end块更紧密,比方法调用更紧密; 结果是Ruby认为你试图提供一个块作为符号的参数并且说不.
通过比较以下内容,您可以看到更清晰(?)或可能更熟悉的示例:
[1, 2, 3].inject 0 { |x, y| x + y }
[1, 2, 3].inject(0) { |x, y| x + y }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1289 次 |
| 最近记录: |