什么是Ruby中的“for”
在Ruby中:
for i in A do # some code end
是相同的:
A.each do |i| # some code end
for
不是内核方法:
- ruby究竟是什么“
for
” - 有没有办法使用其他关键字来做类似的事情?
就像是:
total = sum i in I {x[i]}
映射到:
total = I.sum {|i] x[i]}
这几乎是语法糖。 一个区别是,虽然for
会使用围绕它的代码范围,但each
代码都在其块中创建一个单独的范围。 比较以下内容:
for i in (1..3) x = i end px # => 3
与
(1..3).each do |i| x = i end px # => undefined local variable or method `x' for main:Object
for
只是each
方法的语法糖。 运行此代码可以看出这一点:
for i in 1 do end
这会导致错误:
NoMethodError: undefined method `each' for 1:Fixnum
因为只是语法糖。
从镐 :
因为… In
之前我们说只有内置的Ruby循环原语是while和until。 那么什么是“为了”的东西呢? 好吧,因为几乎是一堆语法糖。 当你写作
for aSong in songList aSong.play end
Ruby将其转换为:
songList.each do |aSong| aSong.play end
for循环和每个表单之间的唯一区别是正文中定义的局部变量的范围。 这将在第87页讨论。
您可以使用for来遍历响应每个方法的任何对象,例如Array或Range。
for i in ['fee', 'fi', 'fo', 'fum'] print i, " " end for i in 1..3 print i, " " end for i in File.open("ordinal").find_all { |l| l =~ /d$/} print i.chomp, " " end
生产:
fee fi fo fum 1 2 3 second third
只要您的类定义了合理的每个方法,您就可以使用for循环来遍历它。
class Periods def each yield "Classical" yield "Jazz" yield "Rock" end end periods = Periods.new for genre in periods print genre, " " end
生产:
Classical Jazz Rock
Ruby没有列表推导的其他关键字(就像你上面提到的总和例子)。 for
不是非常受欢迎的关键字,通常首选方法语法( arr.each {}
)。