Joh*_*ley 32 ruby coding-style
哪种款式首选?一个与另一个有充分的理由吗?
提前致谢!
1) cmds.each do |cmd|
end
2) cmds.each { |cmd|
}
Run Code Online (Sandbox Code Playgroud)
示例代码:
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}"
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*use 22
根据"Pickaxe"一书(我在这里看第2版),戈登是正确的:唯一的区别是优先权:
p.356(我的斜体):
大括号具有很高的优先级;
do优先级低.如果方法调用具有未括在括号中的参数,则块的大括号形式将绑定到最后一个参数,而不是整个调用.该do形式将绑定到调用.
有关示例,另请参见第168页.
nim*_*odm 13
这两种形式是等价的.
建议的样式是使用一个行块的大括号,并对多行块使用"do" - "end".
编辑: Austin Ziegler指出(在下面的评论中)这两种形式具有不同的优先级:大括号具有更高的优先级.因此,当调用没有括号的方法时,{}中包含的块将绑定到最后一个参数而不是调用方法.
以下示例由Austin建议:
def foo
yield
end
puts foo { "hello" }
puts foo do
"hello"
end
Run Code Online (Sandbox Code Playgroud)
第一个"puts"打印"hello":foo被称为返回"hello",这是puts的参数.
第二个保释错误:
in `foo': no block given
Run Code Online (Sandbox Code Playgroud)
因为在这种情况下,do-end块绑定到puts方法.
再次感谢Austin清理这个问题.
ner*_*rdz 11
Gordon的回答是"Ruby Way",尽管将一行放入大括号是一种常见做法,但并不是必需的.
还要注意一个人可以轻松地对结果值采取行动:
cmds.each do |cmd| cmd.upcase! end.sort
# Now, cmds = ["CREATE", "HELP", "LIST", "UPDATE"]
Run Code Online (Sandbox Code Playgroud)
虽然您可能已经看到{}这里的可读性如何,因此如果有其他人想要查看您的代码,则首选:
cmds.each { |cmd| cmd.upcase! }.sort
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4154 次 |
| 最近记录: |