Ski*_*ick 13 ruby idioms ruby-on-rails
我现在正在学习Ruby和RoR,我遇到了这个:
<% for post in @posts %>
Run Code Online (Sandbox Code Playgroud)
在Rails指南中.我明白在Ruby中这样做的惯用方法是:
<% @posts.each do |post| %>
Run Code Online (Sandbox Code Playgroud)
如果有差异那么它是什么?如果没有差别那么Rails人就不会更好地推动正确的Ruby习语(而不是这个,对我来说看起来更像pythonic)?
编辑:我刚刚发现了两个相互矛盾的解释:Tutorials Point说它们是相同的,除了"for循环不会为局部变量创建一个新的范围",而CS.Auckland.ac.NZ说for的只是语法相当于糖.each.
EDIT2:该for ... in问题是在index.html.erb生成app/views/posts的script/generate scaffold.我做了快速检查,现在生成.each语法.我想这部分指南是在支架生成时在轨道开发的早期阶段编写的for ... in.
编辑3:我现在可以确认for x in y在Rails 2.2.2中使用了它,但是它使用的是2.3.8 y.each do |x|.你知道吗
sep*_*p2k 21
tutorialpoint页面是正确的,for相当于each除了范围差异.这是一个演示:
arr = [1,2,3]
arr.each do |x|
last = x
end
last # NameError
Run Code Online (Sandbox Code Playgroud)
与
arr = [1,2,3]
for x in arr
last = x
end
last #=> 3
Run Code Online (Sandbox Code Playgroud)
如果你想让它工作each,你需要last = nil在循环之前做.正如链接指出的那样,这是因为块启动新范围而for不是.
但请注意,这很少产生实际差异,很少有人知道它.
当人们使用for的红宝石是最常见,因为这是他们已经习惯了从其他语言的东西-不是因为之间的差异for和each.