Sag*_*dya 5 ruby each loops for-loop
在Eloquent Ruby(第21页,第一版,第六版)中,作者(Russ Olsen)主张使用该each方法而不是for循环,这与我在其他地方阅读的所有内容一致.
然而,作者还接着说,这样做的一个原因是for循环实际上调用了each方法,那么为什么不切断中间人并使用each呢?所以我想知道这实际上是如何工作的.
为了调查我确实搜索了github上的Ruby repo,但发现很难确定我在哪里/如何看到这个行动.
重申一下这个问题:
如何显示Ruby for循环实际上是使用该each方法实现的?
小智 12
您可以通过编写实现每个的类来显示它:
# Demo that for calls each
class ThreeOf
def initialize(value)
@value = value
end
def each(&block)
puts "In Each"
block.call(@value)
block.call(@value)
block.call(@value)
end
end
Run Code Online (Sandbox Code Playgroud)
然后创建一个实例并在for循环中使用它:
collection = ThreeOf.new(99)
for i in collection
puts i
end
Run Code Online (Sandbox Code Playgroud)
运行它,你会看到打印出来的消息,for"loop"将循环三次.
或者(更有趣)你可以修补内置的Array类:
class Array
alias_method :orig_each, :each
def each(*args, &block)
puts "Array Each called!"
orig_each(*args, &block)
end
end
puts "For loop with array"
for i in [1,2,3]
puts i
end
Run Code Online (Sandbox Code Playgroud)
再次,您将看到打印的消息.
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |