面试题答案
一键面试def process_collection(arr)
result = []
arr.each do |element|
if yield(element)
result << element
end
end
result
end
块在 Ruby 中的工作原理
块(block)是 Ruby 中一种匿名的可执行代码段。它可以附加到方法调用上,作为额外的代码逻辑传递给方法。块没有自己独立的作用域,它会继承定义它的上下文的作用域。当方法执行到 yield
关键字时,会暂停方法的执行,转而执行块中的代码,并将 yield
后面的参数传递给块。块执行完毕后,控制权交回给方法,方法继续执行 yield
之后的代码。
块与迭代器的关系
迭代器(iterator)是 Ruby 中用于遍历集合(如数组、哈希等)的方法。许多迭代器方法,如 each
、map
、select
等,都接受一个块作为参数。块为迭代器提供了针对集合中每个元素执行的具体操作逻辑。迭代器负责按顺序逐个取出集合中的元素,并将其传递给块,由块决定对该元素执行何种操作。通过这种方式,块与迭代器紧密协作,使集合操作变得简洁且灵活。例如 each
方法会遍历数组每个元素,每次都执行传递给它的块,map
方法会根据块的返回值构建一个新数组,select
方法会根据块返回值是否为 true
来筛选元素等。