为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 618 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信