有谁能够解释为什么下面的代码有错误块定义 - 大括号和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>'
,而在与相同的功能代码的作品如预期终止?
irb(main):187:0> print ((1..10).collect { |x| x**2 })
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]=> nil
我也相信大括号“{}”可以代替“做终端”随意在块 定义。
我知道我可以省略打印 方法和第一个括号之间的空间“修复”第一个电话,但我一个解释 很感兴趣,为什么它的行为不同。
另请参见[类似问题的前提](http://stackoverflow.com/questions/2122380/using-do-block-vs-brackets)。 – Zabba 2011-05-30 18:20:14
这是[Ruby Block Syntax Error](http://StackOverflow.Com/q/6854283/)的副本,[传递给'each'的代码块与括号一起使用,但不与'do'-'end'一起使用(ruby )](http://StackOverflow.Com/q/6718340/),[没有'do''end的Ruby多行块]](http://StackOverflow.Com/q/3680097/),[使用'do'块vs括号'{}'](http://StackOverflow.Com/q/2122380/),[Ruby中这些块编码风格的区别或价值是什么?](http://StackOverflow.Com/q/533008 /)和[Ruby块和非自私参数](http://StackOverflow.Com/q/420147/)。 – 2011-07-28 08:17:09
@coreyward:Y U回滚? – 2011-09-21 00:00:29