oyaji's Blog

ruby 基本知识学习

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

呵呵,个人理解。和著述不一致:)

 




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee