Ruby中的闭包、方法对象与函数式编程
1. 闭包
1.1 闭包基础
闭包是Ruby中一个强大的特性,它允许块(block)使用定义在其外部的局部变量和方法参数。例如:
# multiply each element of the data array by n
def multiply(data, n)
data.collect {|x| x*n }
end
puts multiply([1,2,3], 2) # Prints 2,4,6
在上述代码中,与 collect 迭代器关联的块使用了方法参数 n 。
更有趣的是,如果将块转换为 proc 或 lambda ,即使定义它的方法已经返回,它仍然可以访问外部的变量。示例如下:
# Return a lambda that retains or "closes over" the argument n
def multiplier(n)
lambda {|data| data.collect{|x| x*n } }
end
doubler = multiplier(2) # Get a lambda that knows how to double
puts doubler.call([1,2,3]) # Prints 2,4,6
这里的
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



