Ruby.new - Block and Iterators

Blocks and Iterators

Ruby的代码块(block)可以被附加到方法上。可以使用代码块实现回调。实现迭代。
代码块可以包含在花括号中或者是do...end
{ puts "Hello" }       # this is a block

do                     #
  club.enroll(person)  # and so is this
  person.socialize     #
end                    #

一旦创建了一个快,就可以在调用某个方法是将其附加给方法。该方法可以yield语句调用此代码快一次或多次。下面的例子展示了这种用法。首先定义一个方法调用yield两次。我们可以调用这个方法,同时在此方法(和其参数)之后放置一个代码块。
def callBlock
  yield
  yield
end

callBlock { puts "In the block" }

结果:
In the block
In the block
可以在调用代码块是传递参数。看下面的做法:
a = %w( ant bee cat dog elk )    # create an array
a.each { |animal| puts animal }  # iterate over the contents

结果:
ant
bee
cat
dog
elk
看看如何在Aarry类的内部实现each迭代器。在数组内遍历每个元素,然后对每个元素调用yield。伪代码如下:
# within class Array...
def each
  for each element
    yield(element)
  end
end

现在可以使用each方法来遍历数组中的每个元素,并提供一个代码块。此代码块会被每个元素依次调用。
[ 'cat', 'dog', 'horse' ].each do |animal|
  print animal, " -- "
end

结果:
cat -- dog -- horse --

代码块在循环中的用法。
5.times {  print "*" }
3.upto(6) {|i|  print i }
('a'..'e').each {|char| print char }


结果:
*****3456abcde











你可能感兴趣的:(ant,Ruby)