Ruby中这些块编码样式的区别或价值是什么?哪种款式首选?一个与另一个有充分的理由吗?提前致谢!1) cmds.each do |cmd| end2) cmds.each { |cmd| }示例代码:cmds = [ "create", "update", "list", "help" ]# Block style one#cmds.each do |cmd| puts "loop1, cmd: #{cmd}"end# Block style two#cmds.each { |cmd| puts "loop2, cmd: #{cmd}"}
3 回答
手掌心
TA贡献1942条经验 获得超3个赞
根据“Pickaxe”一书(我在这里看第2版),戈登是正确的:唯一的区别是优先权:
p.356(我的斜体):
大括号具有很高的优先级;
do
优先级低。如果方法调用具有未括在括号中的参数,则块的大括号形式将绑定到最后一个参数,而不是整个调用。该do
形式将绑定到调用。
有关示例,另请参见第168页。
月关宝盒
TA贡献1772条经验 获得超5个赞
这两种形式是等价的。
建议的样式是使用一个行块的大括号,并对多行块使用“do” - “end”。
编辑: Austin Ziegler指出(在下面的评论中)这两种形式具有不同的优先级:卷曲括号具有更高的优先级。因此,当调用没有括号的方法时,{}中包含的块将绑定到最后一个参数而不是调用方法。
以下示例由Austin建议:
def foo yieldendputs foo { "hello" }puts foo do "hello"end
第一个“puts”打印“hello”:foo被称为返回“hello”,这是puts的参数。
第二个保释错误:
in `foo': no block given
因为在这种情况下,do-end块绑定到puts方法。
再次感谢Austin清理这个问题。
- 3 回答
- 0 关注
- 644 浏览
添加回答
举报
0/150
提交
取消