在Ruby中:
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]}
Firas Assaad.. 46
这几乎是语法糖.一个区别是,虽然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
Jeremy Ruten.. 14
for
只是该each
方法的语法糖.通过运行此代码可以看到:
for i in 1 do end
这会导致错误:
NoMethodError: undefined method `each' for 1:Fixnum
-1因为两者之间存在差异,并且它们并不总是等价的. (3认同)
rampion.. 9
因为只是语法糖.
从镐:
因为...... In
之前我们说只有内置的Ruby循环原语是while和until.那么什么是"为了"的东西呢?好吧,因为几乎是一堆语法糖.当你写作
for aSong in songList aSong.play endRuby将其转换为:
songList.each do |aSong| aSong.play endfor循环和每个表单之间的唯一区别是正文中定义的局部变量的范围.这将在第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
不是一个非常受欢迎的关键字,方法syntax(arr.each {}
)通常是首选.
这几乎是语法糖.一个区别是,虽然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
因为只是语法糖.
从镐:
因为...... In
之前我们说只有内置的Ruby循环原语是while和until.那么什么是"为了"的东西呢?好吧,因为几乎是一堆语法糖.当你写作
for aSong in songList aSong.play endRuby将其转换为:
songList.each do |aSong| aSong.play endfor循环和每个表单之间的唯一区别是正文中定义的局部变量的范围.这将在第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
不是一个非常受欢迎的关键字,方法syntax(arr.each {}
)通常是首选.