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中非常重要的编程工具,可以大大简化代码,提高开发效率。