我不確定我是否理解此語法錯誤。我正在使用Carrierwave在Rails應用程序中管理一些文件上傳,而且我似乎錯誤地將一個塊傳遞給其中一種方法。這是Carrierwave文檔中的示例: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]; endversion :half do process :resize_to_limit => [470, 470]; endversion :third do process :resize_to_limit => [306, 306]; endversion :fourth do process :resize_to_limit => [176, 176]; end所以,我的問題是,do...end在這種情況下,為什么我可以使用但不使用花括號傳遞塊?謝謝!
1 回答

慕容3067478
TA貢獻1773條經驗 獲得超3個贊
嘗試這個:
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 }
- 1 回答
- 0 關注
- 662 瀏覽
添加回答
舉報
0/150
提交
取消