在红宝石中:
for i in A do
# some code
end
是相同的:
A.each do |i|
# some code
end
for
不是内核方法:
for
红宝石中的“”到底是什么- 有没有办法使用其他关键字来做类似的事情?
就像是:
total = sum i in I {x[i]}
映射到:
total = I.sum {|i] x[i]}
在红宝石中:
for i in A do
# some code
end
是相同的:
A.each do |i|
# some code
end
for
不是内核方法:
for
红宝石中的“”到底是什么就像是:
total = sum i in I {x[i]}
映射到:
total = I.sum {|i] x[i]}
这几乎是语法糖。一个区别是,虽然for
会使用它周围的代码范围,但each
会在其块内创建一个单独的范围。比较以下内容:
for i in (1..3)
x = i
end
p x # => 3
相对
(1..3).each do |i|
x = i
end
p x # => undefined local variable or method `x' for main:Object
for
只是该each
方法的语法糖。这可以通过运行以下代码看到:
for i in 1 do
end
这会导致错误:
NoMethodError: undefined method `each' for 1:Fixnum
For 只是语法糖。
从镐:
对于...在
前面我们说过,唯一内置的 Ruby 循环原语是 while 和 until。那么,这个“为”的东西是什么?好吧, for 几乎是一大堆语法糖。当你写
for aSong in songList aSong.play end
Ruby 将其翻译成如下内容:
songList.each do |aSong| aSong.play end
for 循环和 each 形式之间的唯一区别是在主体中定义的局部变量的范围。第 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
只要你的类定义了一个明智的 each 方法,你就可以使用 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 没有其他用于列表推导的关键字(如您上面所做的 sum 示例)。 for
不是一个非常流行的关键字,arr.each {}
通常首选方法语法 ( )。