ruby 基本知识学习 - oyaji's Blog
ruby 基本知识学习
oyaji
posted @ 2010年12月24日 18:41
in ruby
with tags
ruby proc closure
, 1339 阅读
1. proc
#Proc.new {|x| puts x}
#|x|就相当于一个变量了,这个变量的值是Proc.call()里传递过来的
greeting = Proc.new {|someone| puts "Hi, #{someone}"}
greeting.call("Lily") ---输出:Hi,Lily
def add(m)
return Proc.new {|n| n + m }
# return lambda {|n| n + m } ---也可以写成这样,lambda将一个block转化成proc对象
end
add10 = add(10) --- m = 10
add100 = add(100) --- m = 100
print "40 + 10 = "
puts add10.call(40) --- n = 40
print "427 + 100 = "
puts add100.call(427) --- n = 427
2. closure
闭包:即使block被定义时的环境早就消失了,block仍然可以使用其原始作用域中的信息。
比如上例中的
add10 = add(10) --- m = 10
puts add10.call(40) --- n = 40
其实:add10对象就是用10这个参数来构造的,那自然在add10这个实例中始终知道10的存在,
所以在add10.call()时可以使用10
呵呵,个人理解。和著述不一致:)