Ruby中的块和迭代器是一种方便的编程工具,可以用来处理集合中的元素。
块(block)是一段代码,可以在方法中被调用,可以看作是匿名函数。块可以用花括号 {} 或者 do/end 来定义。例如:
[1, 2, 3].each do |num|
puts num
end
上面的代码中,each 方法用来遍历数组 [1, 2, 3] 中的元素,并将每个元素传递给块中的变量 num。块中的代码 puts num 会被执行三次,分别输出 1、2、3。
迭代器(iterator)是一种可以重复执行的代码结构,通常用于遍历集合中的元素。Ruby中的迭代器都是通过块来实现的。常见的迭代器包括 each、map、select 等等。例如:
[1, 2, 3].map do |num|
num * 2
end
上面的代码中,map 方法用来遍历数组 [1, 2, 3] 中的元素,并将每个元素传递给块中的变量 num。块中的代码 num * 2 会被执行三次,分别返回 2、4、6。整个表达式的返回值是一个新的数组 [2, 4, 6]。
块和迭代器还可以和方法一起使用,例如:
def my_method
puts "start"
yield
puts "end"
end
my_method do
puts "hello"
end
上面的代码中,my_method 方法中的 yield 语句会调用传递给它的块。因此这个程序的输出是:
start
hello
end
需要注意的是,块和迭代器需要使用关键字 yield 来调用,而不能直接通过方法调用。另外,块和迭代器也可以接受参数,例如:
def my_method
puts "start"
yield("world")
puts "end"
end
my_method do |name|
puts "hello, #{name}"
end
上面的代码中,块接受一个参数 name,在调用中将字符串 "world" 传递给它。因此这个程序的输出是:
start
hello, world
end
总之,块和迭代器是Ruby中非常重要的编程工具,可以大大简化代码,提高开发效率。