eck*_*kza 7 ruby forms builder curly-braces
我已经使用Ruby大约两个星期了,而且我的编程时间太长了,但是我从C风格的背景(C++,C#等)开始学习语言.无论如何 - 我的一个好朋友和导师正在看着我前几天写过的一些Ruby,他告诉我,如果他再次使用Ruby中的花括号,他会打我.
好吧,我昨天通过这篇About.com文章发现了关于Builder的内容,他们发布的示例使用花括号.有没有不同的方法来做到这一点,还是你必须使用Builder的花括号?
这似乎是一个小问题,但我是Ruby的新手,我不想让自己养成任何坏习惯.你们有什么感想?
Mla*_*vić 11
虽然有些人选择"支持单行,支持多行",但我个人认为以下规则最合乎逻辑:
do-end时,你块有副作用(通常,与each和相关方法)和map,inject相似)这个逻辑很适合Matt写的方法链问题.
这种方法的一个好处是,它会让你在每次编写块时考虑副作用,并且它们非常重要,尽管有时会被没有函数编程背景的编码器忽略.
如果不涉及副作用术语,另外一种方法是:
do-end该块执行{和返回的}块这里有几篇文章有更多信息:
http://onestepback.org/index.cgi/Tech/Ruby/BraceVsDoEnd.rdoc
http://talklikeaduck.denhaven2.com/2007/10/02/ruby-blocks-do-or-brace
Mat*_*ggs 10
惯用的红宝石是
method_name {|param| param.do_something} # squigglies for one liners
# do/end for multi-line
method_name do |param|
param.do_something
end
Run Code Online (Sandbox Code Playgroud)
这样做的一个原因是链接,foo.map {|f| f.num}.reduce(0) {|memo, i| memo + i}看起来更好然后挂一个end类似的方法调用
foo.map do |f|
f.num
end.reduce(0) do |memo, i|
memo + i
end
Run Code Online (Sandbox Code Playgroud)
调用一个方法只有一些奇怪的东西end,即使语法上两者是等价的.