小编S1a*_*man的帖子

块定义 - 大括号和do-end之间的区别?

任何人都可以解释为什么以下代码中止错误

irb(main):186:0> print ((1..10).collect do |x| x**2 end)
SyntaxError: (irb):186: syntax error, unexpected keyword_do_block,
expecting ')'
print ((1..10).collect do |x| x**2 end)
                         ^
(irb):186: syntax error, unexpected keyword_end, expecting $end
print ((1..10).collect do |x| x**2 end)
                                      ^
        from /usr/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)

而具有相同功能的以下代码是否按预期工作?

irb(main):187:0> print ((1..10).collect { |x| x**2 })
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]=> nil
Run Code Online (Sandbox Code Playgroud)

我确实认为花括号"{}"可以在块定义中任意替换"do end".

我知道我可以通过省略print方法和第一个括号之间的空格来"修复"第一个调用,但我对解释它为什么表现不同感兴趣 .

ruby block

9
推荐指数
1
解决办法
2167
查看次数

标签 统计

block ×1

ruby ×1