我已经使用 Ruby 大约两周了,而且我的编程时间也不算太长,但我是从 C 风格的背景(C++、C# 等)开始学习这门语言的。无论如何 - 我的一个好 friend 兼导师正在看我前几天写的一些 Ruby,他告诉我,如果他再次发现我在 Ruby 中使用花括号,他会打我。
好吧,我昨天才通过 this About.com article 了解到有关 Builder 的信息,并且他们发布的示例使用花括号。是否有不同的方法来执行此操作,或者您是否必须在 Builder 中使用花括号?
这似乎是一个小问题,但我是 Ruby 的新手,我不想让自己养成任何坏习惯。大家怎么看?
最佳答案
虽然有些人认为“单线用大括号,多线用 do-end”,但我个人认为以下规则最合乎逻辑:
- 当您的 block 有副作用时使用
do-end
(通常使用each
和相关方法)和 - 当您的 block 没有副作用时使用大括号(
map
、inject
等)
这个逻辑与 Matt 所写的方法链问题相吻合。
这种方法的一个好处是,它会让您在每次编写 block 时都考虑副作用,它们非常重要,尽管有时会被没有函数式编程背景的编码人员忽视。
不涉及副作用术语的另一种表达方式是:
- 对执行 的 block 使用
- 对返回 的 block 使用
do-end
{
和}
这里有几篇文章提供了更多信息:
http://onestepback.org/index.cgi/Tech/Ruby/BraceVsDoEnd.rdoc
http://talklikeaduck.denhaven2.com/2007/10/02/ruby-blocks-do-or-brace
关于ruby - 使用大括号是否违反 "Ruby way"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5170323/