还有是选择两种常见的方式do end
与{ }
使用Ruby块:
第一种也是非常常见的样式已由Ruby on Rails普及,它基于单行还是多行的简单规则:
这是有道理的,因为do / end在单行代码中读取效果很差,但是对于多行代码块,将结束}
符挂在自己的行上与end
红宝石中使用的其他所有内容(例如模块,类和方法定义(def
等)不一致。)和控制结构(if
,while
,case
等)
第二种较少见的样式是语义的,即已故的红宝石学家吉姆·魏里希(Jim Weirich)提出的“ 韦里奇括号 ”:
- 使用
do end
的程序块
{ }
对功能块使用花括号
这意味着在评估该块的返回值时,它应该是可链接的,并且花{}
括号对于方法链接更有意义。
另一方面,当评估该块的副作用时,则返回值无关紧要,并且该块只是“在做”某件事,因此链接没有意义。
语法上的这种区别传达了有关块评估以及是否应关心其返回值的视觉含义。
例如,此处将块的返回值应用于每个项目:
items.map { |i| i.upcase }
但是,这里不使用块的返回值。它的工作程序上,和做与它的副作用:
items.each do |item|
puts item
end
语义样式的另一个好处是,您无需更改大括号即可执行/结束操作,因为仅在行中添加了一行。
观察到,巧合的功能块通常是单线的,而过程块(例如config)是多行的。因此,遵循Weirich风格最终看起来与Rails风格几乎相同。