亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Ruby塊語法錯誤

Ruby塊語法錯誤

HUH函數 2020-02-02 14:19:25
我不確定我是否理解此語法錯誤。我正在使用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 }


查看完整回答
反對 回復 2020-02-02
  • 1 回答
  • 0 關注
  • 662 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號